• 締切済み

PostMessageについて

Windows2000でPostMessage関数を引数"HWND_BROADCAST" で実行した場合の動作について教えてください。

みんなの回答

noname#9414
noname#9414
回答No.1

他のWindowsと同じ動作です。 #MSDNにでも何でものっています。 ではでは☆

関連するQ&A

  • PostMessageがERROR_ALREADY_EXISTS終了

    Windows2000 SP3上で動作するDLLを作成しています。 (先方のご都合でSP4ではなくSP3です) そのDLLではPostMessage関数でメッセージを同じウィンドウへ繰り返し送っているのですが、突然、PostMessage関数がERROR_ALREADY_EXISTS終了してしまう現象が発生してしまいます。 そこでご教示頂きたいのですが、PostMessage関数がERROR_ALREADY_EXISTS終了する原因はどんなことが考えられるのでしょうか? 通常、ERROR_ALREADY_EXISTS終了はCreateMutex関数などで同じ名前のオブジェクトがある場合に返されるエラーだと認識しているのですが、PostMessage関数で発生する原因が掴めずに困っています。 以下、ソースですが、単純にPostMessage失敗時にGetLastErrorを行っているだけです... bReturn = PostMessage(hWnd, uMsg, (WPARAM)NULL, (LPARAM)lplMsg); if (bReturn == FALSE) { lasterror = GetLastError(); // エラー処理 } 以上、よろしくお願い致します。

  • PostMessageの連続送信

    毎々お世話になります。 開発環境はNT4.0+SP6、VC++6.0です。 CWndのウインドウに対し上位のアプリからPostMessageを行いイベントを発行させようとしています。 1回ずつPostMessageを行うと問題ないのですが、 Call PostMessage(hwnd, WM_USER + &H1000, 1, 100) Call PostMessage(hwnd, WM_USER + &H1001, 1, 102) Call PostMessage(hwnd, WM_USER + &H1002, 1, 103) のように連続してPostMessageを行うとイベントが逆転して発行されてしまいます。(103,102,100の順にイベントが発行されます。) イベントをPostMessageを行った順に発行させることは可能でしょうか? よろしくお願いいたします。

  • WindowsサービスでPostmessage

    Windowsサービスアプリケーションで普通にCreateWindow APIを使用してウィンドウを作成し、このウィンドウに対して同じアプリケーション内からPostMessageするとメッセージが送られません。PostMessage関数自体は戻り値から判断すると正常に完了しているように思われます。(戻り値は1) ウィンドウ生成は下記のように行っています。 CreateWindow("SERVICE_WINDOW", "", WS_POPUP,0 , 0, 0, 0, NULL, NULL, 0, NULL); Windowsサービスではなく通常のアプリケーションとして起動した場合は普通にPostMessage出来ています。 ちなみにサービスのプロパティで「デスクトップとの対話を許可する」にチェックを入れても変わりませんでした。 また、サービスを実行するアカウントをAdministrator権限のあるユーザーに変えても同じでした。 原因と対処法分かりますでしょうか? これが出来ない場合、別の方法による代替手段はありますでしょうか? 実行環境はWindows XPです。

  • Postmessageが失敗してしまう

    UnixからrshによりWindows内のBatファイルを起動しプロセスを実行 しようとしています。プロセス実行は行えるのですが、 実行されたプロセス内でPostmessageのエラーが発生してしまいます。 GetLastErrorで取得した値はエラー内容は1400です。 内容は”ウインドウハンドル無効です”というものでした。 UnixのrshからでなくWindows内で実行した場合はエラーになりません。 何が原因かわかりません。些細な事でも構いませんので宜しくお願い 致します。  Uinuxマシン:UP  Windowsマシン:WinXP(Pro)SP2  Rsh:Microsoft Windows Service For Unixを使用

  • ATLでのPostMessageについて

    ATLでコントロールの開発をしています。 PostMessageでコントロールにメッセージを送信したいのですが、 MFCでいうAfxGetMainWnd()のようなグローバル関数はあるのでしょうか。 ::PostMessage(???, WM_COMMAND, ID_XXXX, NULL);

  • PostMessageで外部のexeへメッセージを送ったときに不具合が出る

    現在、PostMessageを利用して外部のexeへファイル名(フルパス)を送信して、 そのファイルをexeで読み込むようにさせています。 以下、そのプログラムです。 CWnd *hWnd = FindWindow("ConsoleWindowClass", "C:\\WINDOWS\\system32\\cmd.exe"); char str[256]="C://sumple//test.txt\n" int len = 256; for( int i=0; i<len; i++ ){ ____char c; ____c = toupper( str[i] ); ____switch( str[i] ) ____{ ________case '\n': ________c = VK_RETURN; ________break; ____} ____hWnd->PostMessage(WM_KEYDOWN, c, 0 ); } ところが、たとえばファイルパスが"C://sumple//aa.txt\n" のように、同じ文字が連続して存在すると"aa.txt"ではなく"a.txt"として送信されてしまいます。 このような現象にはどう対応すればよいのでしょうか? また、"/"や"."などの記号は"Csumpleaatt\n"のように存在しないとして処理されているようなので case '/': ____hWnd->PostMessage(WM_KEYDOWN, VK_DIVIDE, 0 ); ____break; のように直接仮想キーコードで入力しています。(こちらは上手くいっています) 文字の連続で起こる現象にも使えるかと思って case 'a': ____hWnd->PostMessage(WM_KEYDOWN, 0x41, 0 ); ____break; としてみたのですが、やはり駄目でした。 ファイル名に連続した文字を使わなければいいのでしょうが、汎用性を持たせるためにもどうにか解決したいと思います。 どうかご解答をお願いします。

  • PostMessageで外部のexeへメッセージを送ったときに不具合が出る

    現在、PostMessageを利用して外部のexeへファイル名(フルパス)を送信して、 そのファイルをexeで読み込むようにさせています。 以下、そのプログラムです。 CWnd *hWnd = FindWindow(\"ConsoleWindowClass\", \"C:\\\\WINDOWS\\\\system32\\\\cmd.exe\"); char str[256]=\"C://sumple//test.txt\\n\" int len = 256; for( int i=0; i<len; i++ ){ ____char c; ____c = toupper( str[i] ); ____switch( str[i] ) ____{ ________case \'\\n\': ________c = VK_RETURN; ________break; ____} ____hWnd->PostMessage(WM_KEYDOWN, c, 0 ); } ところが、たとえばファイルパスが\"C://sumple//aa.txt\\n\" のように、同じ文字が連続して存在すると\"aa.txt\"ではなく\"a.txt\"として送信されてしまいます。 このような現象にはどう対応すればよいのでしょうか? また、\"/\"や\".\"などの記号は\"Csumpleaatt\\n\"のように存在しないとして処理されているようなので case \'/\': ____hWnd->PostMessage(WM_KEYDOWN, VK_DIVIDE, 0 ); ____break; のように直接仮想キーコードで入力しています。(こちらは上手くいっています) 文字の連続で起こる現象にも使えるかと思って case \'a\': ____hWnd->PostMessage(WM_KEYDOWN, 0x41, 0 ); ____break; としてみたのですが、やはり駄目でした。 ファイル名に連続した文字を使わなければいいのでしょうが、汎用性を持たせるためにもどうにか解決したいと思います。 どうかご解答をお願いします。

  • メインスレッドのPostMessageとマルチスレッドでの処理

    お世話になります、fujicafeと申します。 現在Visual Studio 2005にてVC++のプログラムの作成をしており、 お聞きしたいことがありまして、こちらにて投稿させていただきました。 質問したい内容はPostMessageによる非同期呼び出しによるメインスレッド関数の処理と、別スレッドからのメインスレッド関数呼び出しによる処理の違いについてです。 現在、メインスレッドにマルチメディアタイマーを使って、ある時間間隔毎にメインスレッドの関数を呼び出しています。その関数の呼び出しにはPostMessageを使用しています。 その関数の呼び出しをAfxBeginThreadを使用して、メインスレッドから別スレッドを作成し、その別スレッド内にてメインスレッドのオブジェクトを作成して、実行したいメインスレッドの関数を呼び出すと、もともとのPostMessageを使用して関数を呼び出すのとでは処理としてどのような違いがあるのでしょうか? スレッドを別にするということで、メインスレッド側に負荷をかけないといったことが違うのでしょうか? だいぶ検討はずれの質問かとは思いますが、ご教授よろしくお願いいたします。

  • コンソールアプリケーションでの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 ); }

  • CLRのメッセージの送信について。

    WIN32APIを使って今までプログラムを作っていましたが、CLRを使ってプログラミングをしようと思い始めたのですが要領がつかめません。 やりたいことは他のアプリケーションにメッセージを送信することです。APIのPostMessage(HWND_BROADCAST, Message, 1, 0); のような感じでForm1の設定の内容を送りたいのですがどうすればそのようなことができるのでしょうか? Visual C++ で新しいプロジェクトCLR Windows フォームアプリケーション を選択してプロジェクトを作りました。 そのあとどうすればよいか教えてください。 そもそもForm1のウィンドウプロシージャはどうなってるのかすらわかりません。仕組みがちんぷんかんぷんでした。

専門家に質問してみよう