- ベストアンサー
ウインドウの位置を知る。
c++BuilderXE2です。 HWND hwnd=FindWindow(NULL,L"P_orderwb"); で取得したウィンドウのスクリーン上の位置を知るにはどうすればよいですか。 ウインドウハンドルに対応した位置のプロパティがわからないのです。 例えば hwnd->Left,hwnd->Top などでできないかと試しましたが、メンバーではありませんでした。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
その他の回答 (1)
- qwertfk
- ベストアンサー率67% (55/81)
関連するQ&A
- visualstudioについて
visualstudio2008 c++でアプリケーションを作っているのですが, 画像のようなアプリケーションを起動させ, HWND hWnd = ::FindWindow(NULL,"D:\アプリケーション.exe"); ::SendMessage(hWnd,WM_SETFOCUS,0,0); としたのですが,ウィンドウハンドルを取得できていないみたいで,SendMessageが働いていません. また,HWND hWnd = ::FindWindow(NULL,"D:\アプリケーション.exe");の行のところで warning C4129: '' :とエラーがでているのですがどうしてでしょうか? 一応"D:\\アプリケーション.exe"と変えれば警告は消えます. よろしくお願いします.
- ベストアンサー
- C・C++・C#
- 任意のIEにリンクを指定したいです
2つのIEが起動しており、そのうち指定するIEの方にリンク先を上書きする方法をご教授頂ければと思います。 環境はVisual C++ 2005 Express Editionのwin32コンソールで作成しています。 IEを起動する方法として、FindWindow関数で上書きしたいIEのウィンドウ名のハンドルを取得し、ShellExecute関数でそのハンドルにリンク先を指定する方法を取っています。 下記は作成したプログラムです。 確かに指定したウィンドウ名を参照し、hWndにNULL以外の値が入っておるのですが、URLを上書きするウィンドウが指定したウィンドウではなく、最後に起動したIEのウィンドウに表示されてしまいます・・・。 説明べたなので例を示します・・・。以下のような動作になります。 (1)作成したプログラムからIEを起動する。ウィンドウ名:test - Windows Internet Explorer (2)デスクトップから新規にIEを起動する。ウィンドウ名:yahoo - Windows Internet Explorer (3)もう一度作成したプログラムからIEを起動すると、(2)で起動したIEに上書きしてしまう。本当は(1)に上書きしたいのに・・・。 また、ShellExecuteの第一引数はそのハンドルを持つウィンドウを差していると認識しているのですが、違いますでしょうか? /////////////////////////////////////////////////// HWND hWnd = FindWindow( NULL, "ウィンドウ名") ); if ( hWnd != NULL ) { ShellExecute( hWnd, "Open", URL, NULL, NULL, SW_SHOW ); } else { ShellExecute( NULL, "Open", "IExplore", URL, NULL, SW_SHOW ); } ///////////////////////////////////////////////////
- ベストアンサー
- C・C++・C#
- ウインドウの取得
かんたんYouTubeプレーヤーというソフトのウインドウハンドルを取得し、プレーヤーウインドウのサイズや位置を変更するプログラムをVB2008で作成しようとしました。このプレーヤーはリストウインドウとプレーヤーウインドウの二つがあるのですが、窓ちぇき!というソフトでタイトルとクラス名を調べたら二つとも同じタイトルとクラス名になっていました。これだとFindWindow関数でウインドウハンドルを取得できません。どうすればよいでしょうか。
- ベストアンサー
- Visual Basic
- 【C#】FindWindowExの使い方を教えてください
はじめまして Visual Studio 2005を使用しています。 C#.NETは、いじり初めて1週間の超初心者です。 C#.NETでのFindWindowExの使い方を教えてください。 まずはじめに、vb.netで作ったアプリAの"Form1"があり、その中にテキストボックス"TextBox1"があります。 "TextBox1"のテキスト(キャプション?)には同じく"TextBox1"と入力されています。 そこで、C#側のアプリBでVBのアプリAの"Form1"のハンドルをFindWindowで取得します。 ここまでは出来ました。 次に、FindWindowExを使って"TextBox1"のハンドルを取得したいのですが、どうしてもうまく取得できません(0が返ってきます) 以下、C#のソースです。 (textBox1のMultilineはTrueです) ================================================================== using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Runtime.InteropServices; namespace WindowsApplication1 { public partial class Form1 : Form { [DllImport("user32.dll")] static extern IntPtr FindWindow(string lpClassName, string lpWindowName); [DllImport("user32.dll")] static extern IntPtr FindWindowEx(IntPtr hWnd, IntPtr hwndChildAfter, string lpszClass, string lpszWindow); public IntPtr hWnd = (IntPtr)0; public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { IntPtr hWnd; IntPtr hWndTest; string sClassName = null; string sWindowText = "AppA"; // アプリAのウインドウハンドルを取得 hWnd = FindWindow(sClassName, sWindowText); textBox1.Text = "ウインドウのハンドル " + hWnd + "\r\n"; // アプリAのウインドウ内のTextBox1のハンドルを取得 hWndTest = hWnd; sClassName = null; sWindowText = "TextBox1"; hWnd = FindWindowEx(hWndTest, IntPtr.Zero, sClassName, sWindowText); textBox1.Text += "テキストボックスのハンドル " + hWnd; } } } ================================================================== Spy++で覗くとテキストボックスにもハンドルが割り与えられているので取得できるはずだと思っているのですが、どうしてもいまくいきません。 どうか、よろしくご享受願います。 ちなみに、アプリAのテキストボックスのクラス名が”WindowsForms10.EDIT.app.0.378734a”となっているのですが、これはどの環境でビルド(コンパイル)しても不変なのでしょうか? 不変だとしたら、クラス名を使えば悩まずに取得できると思うのですが・・・(実験済み)
- ベストアンサー
- その他(プログラミング・開発)
- コンソールアプリケーションでのWIN32 APIメッセージ処理
コンソールアプリケーションでのWIN32 APIメッセージ処理 VisualStdio.NET 2005のC++で作成しているコンソールアプリケーションで、 PostMessageでメッセージを送信しているのに、PeekMessageで検出できません。 下のプログラムに誤った点があるのでしょうか? 尚、ウィンドウハンドルの確認部分はパスしますが、 PostMessageとPeekMessageの引数hWndをNULLに置き換えるとメッセージの検出はできるので、 やはり、ウィンドウハンドルに問題があるのかもしれません。 #include <windows.h> #include <stdio.h> void main( void ) { char OldTitle[1024], NewTitle[1024]; char WindowText[1024], ConsoleTitle[1024]; HWND hWnd; MSG Msg; /*** ウィンドウハンドルの取得 ***/ GetConsoleTitle( OldTitle, 1024 ); wsprintf( NewTitle, "%d/%d", GetTickCount(), GetCurrentProcessId()); SetConsoleTitle( NewTitle ); Sleep(40); hWnd = FindWindow( NULL, NewTitle ); SetConsoleTitle( OldTitle ); /*** ウィンドウハンドルの確認 ***/ GetWindowText( hWnd, WindowText, 1024 ); GetConsoleTitle( ConsoleTitle, 1024 ); if ( strcmp( WindowText, ConsoleTitle ) != 0 ){ printf( "ウィンドウハンドルが不正です" ); return; } /*** メッセージの送信と検出 ***/ PostMessage( hWnd, 1050, 0, 0 ); do{ while ( PeekMessage( &Msg, hWnd, 0, 0, PM_REMOVE )){ printf( "メッセージを検出しました" ); return; } } while( 1 ); }
- ベストアンサー
- C・C++・C#
- ウィンドウハンドルの取得方法
ダイアログの表示されないEXEを起動させて、FindWindowを使用してそのEXEのウィンドウハンドルを取得したいのですが上手くいきません・・。 FindWindowの第一引数は「ウィンドウのクラス名」を指定するようなのですが、「ウィンドウのクラス名」の意味が良くわかりません。第二引数は「ウィンドウ名」を指定するようなのですが、今回のようなアンダーグラウンドで動くEXEには「ウィンドウ名」は無いと思ってよいのでしょうか? ちなみにダイアログのあるEXEならウィンドウハンドルを取得できます。 お分かりの方がいらっしゃれば、ご教授願います。
- 締切済み
- C・C++・C#
- Wordでウィンドウハンドル(Hwnd)を取得したい
Word2007、2002を使用しています。 Wordでウィンドウハンドル(Hwnd)を取得したいと思ったのですが、 どのように取得して良いかわかりませんでした。 Excelであれば以下のように取得できました。 Excel.Application.Hwnd どのようなプログラムを書けばHwndは取得できますでしょうか? 私なりに調べてみたのですが、うまく見付けられませんでした。 もしご存知でしたら、ご教示お願いいたします。
- ベストアンサー
- オフィス系ソフト
- win32 GetWindowLong
GetWindowLongで別のプログラムのウインドウハンドルを取得してウィンドウプロシージャのアドレスを調べようと思ったのですが取得できません。他のウィンドウのウィンドウプロシージャのアドレスは取得できないのでしょうか? ------------------------------------------ #include <stdio.h> #include <string.h> #include <windows.h> struct cell{ HWND hWnd; char WindowName[256]; }; BOOL CALLBACK EnumWndProc( HWND hWnd, LPARAM lParam ) { char buff[256]=""; GetWindowText( hWnd,buff, sizeof(buff));//ウインドウの文字を取得して、 if(strcmp(buff,((cell*)lParam)->WindowName)==0){//名前が一致したら、 ((cell*)lParam)->hWnd = hWnd;//ウィンドウハンドルを渡す } return true; } int main(int argc, char* argv[]) { cell c; c.hWnd =NULL; strcpy(c.WindowName,"無題 - メモ帳");//検索するウィンドウの名前 EnumWindows( EnumWndProc, (LPARAM)&c); LONG wndproc, exstyle; if(c.hWnd != NULL){ //目的のウインドウハンドルが取得できました wndproc = GetWindowLong(c.hWnd, GWL_WNDPROC); //メモ帳のウィンドウプロシージャが取得できない exstyle = GetWindowLong(c.hWnd, GWL_EXSTYLE); } return 0; }
- ベストアンサー
- C・C++・C#
- C言語でPDFファイルのサイズと位置を変更したい
PDFのファイルをサイズと位置を指定して開きたいのですがうまく行きません、 良い方法はありませんか? 現在のコード //v8.3 PDFのファイルのサイズと位置を変更 BOOL MovePDF(LPCTSTR lpszCloseFile) { CWnd* pWnd; CString str = lpszCloseFile; //v8.2 ウィンドウを検索してハンドルの取得 pWnd = FindWindow("AcrobatSDIWindow", str + " - Adobe Reader"); if (pWnd != NULL){ //v8.3 見つかったウィンドウのサイズと位置を変更(x,y,widh,height) pWnd->MoveWindow(0, 0, 600, 600); return TRUE; } else MessageBox("ウィンドウハンドルが取得できませんでした。"); return FALSE; } //v7.4 レイアウト図作成手順表示 BOOL MakeLayout1() { int ret; CString strFileName; strFileName = m_cFunc.GetInitDir() + "\\PDF\\レイアウト図作成手順1.pdf"; SHELLEXECUTEINFO sei = { 0 }; //構造体のサイズ sei.cbSize = sizeof(SHELLEXECUTEINFO); //起動側のウインドウハンドル sei.hwnd = m_hWnd; //起動後の表示状態 sei.nShow = SW_SHOWNORMAL; //このパラメータが重要で、セットしないとSHELLEXECUTEINFO構造体のhProcessメンバがセットされない。 sei.fMask = SEE_MASK_NOCLOSEPROCESS; //起動プログラム sei.lpFile = strFileName; //プロセス起動 if(!ShellExecuteEx(&sei) || (const int)sei.hInstApp <= 32){ TRACE("error ShellExecuteEx\n"); } else { //v8.3 入力可能状態になるまで待つ WaitForInputIdle(sei.hProcess, INFINITE); } //v8.3 サイズと位置変更 MovePDF("レイアウト図作成手順1.pdf"); return TRUE; }
- 締切済み
- C・C++・C#
- VC++コンソールアプリでのインスタンスハンドルの取得
VC++コンソールアプリでのインスタンスハンドルの取得 VC++コンソールアプリケーションでインスタンスハンドルを取得しようとしているのですが、 HINSTANCE hi = (HINSTANCE)GetWindowLong(HWND_DESKTOP, GWL_HINSTANCE); を実行すると、NULLが戻ってきます。 どこかまずい部分があるのでしょうか。 なお、第一引数のウィンドウハンドルは不明なため、 いくつかのWebサイトに習い、HWND_DESKTOPを指定しました。
- ベストアンサー
- C・C++・C#
お礼
winAPIで再度net検索するとヒットしました。そうして確認できました。 実は、GetWindowRectをc++BuilderXE2のヘルプの検索キーワードで検索したところ、FMXのGetWindowRectしか出てこず悩んでいました。 どうもXE2のヘルプが使いこなせません。