Win32API 質問箱 Build6
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
NGNGやさしいお兄さんたちが答えてくれるかも。
でも、最低限Web検索ぐらいはしてね。
過去スレ
Win32API 質問箱 Build5
http://pc3.2ch.net/test/read.cgi/tech/1028580373/
Win32API 質問箱 Build4
http://pc3.2ch.net/test/read.cgi/tech/1023361418/
Win32API 質問箱 Build3
http://pc.2ch.net/tech/kako/1006/10067/1006783012.html
Win32API【2】
http://pc.2ch.net/tech/kako/1006/10067/1006783012.html
Win32API 質問箱
http://pc.2ch.net/tech/kako/991/991576947.html
参考
MSDN Online
http://www.microsoft.com/japan/msdn/default.asp
猫でもわかるプログラミング
ttp://www.kumei.ne.jp/c_lang/index.html
0951デフォルトの名無しさん
NGNGという事は、CreageMutex(FALSE) でミューテックス作成したのち、
WaitForSingleObject(0) が WAIT_TIMEOUT になるかどうかを調べ
たほうがいいのか?
0952デフォルトの名無しさん
NGNG計算された物なんでしょうか?
dwStyleをキャストしてSetWindowLongで渡すと暴走に近い予期せぬ動きを
してしまいます。
DWORD hoge=(DWORD)(GetWindowLong(hWnd,GWL_STYLE))|WS_CAPTION;
等とするとhogeはSetWindowLongで使える有効値になるようなのですが
dwStyleそのものを渡す事は出来ないのでしょうか?
0953デフォルトの名無しさん
NGNGなるほど。それなら完璧だ。
最初に作成したプロセスがそのまま所有権を持つ必要はないから
作成と所有権の取得はatomicでなくても問題ないな。
0954デフォルトの名無しさん
NGNG何が問題になってるのかわからないけど、SetWindowLong() ではちゃんと
GWL_STYLE を指定してる?
0955デフォルトの名無しさん
NGNGGWL_STYLE指定しています。
具体的には
SetWindowLong(hWnd,GWL_STYLE,(LONG)dwStyle);
が上手くいかないのです。
0956デフォルトの名無しさん
NGNG「hWnd パラメータで指定したウィンドウが呼び出し側のスレッドと同じプロセスに
属していない場合、SetWindowLong 関数は失敗します。」ってのは?
0957デフォルトの名無しさん
NGNGそのへんは問題無いと思います。
DWORD hoge=(DWORD)(GetWindowLong(hWnd,GWL_STYLE))|WS_CAPTION;
SetWindowLong(hWnd,GWL_STYLE,hoge);
このようにすれば反映されるんで・・・
これdwStyleの各定数を有効に変更された物と無効に変更された物とで
いちいち論理演算してやらないとだめって事ですよね?
それは面倒なのでdwStyleの値そのものが使えないかと思いましで
0958デフォルトの名無しさん
NGNG「dwStyleの値そのもの」ってdwStyleに何もセットしないでSetWindowLongに渡すってこと?
0959957
NGNGしたい物 ○
です。
あれ?これってもしかして激しくスレ違いの予感??
APIの問題じゃなくて論理演算の問題かな?
0960gn355my0
NGNG> DWORD hoge=(DWORD)(GetWindowLong(hWnd,GWL_STYLE))|WS_CAPTION;
> SetWindowLong(hWnd,GWL_STYLE,hoge);
> このようにすれば反映されるんで・・・
今はどーやってんの?
0961デフォルトの名無しさん
NGNGDWORD dwStyle;
SetWindowLong(hWnd, GWL_STYLE, (LONG)dwStyle);
ってやってるように聞こえる。
0963957
NGNGSetWindowLong(hWnd,GWL_STYLE,(LONG)dwStyle);
ていうふうにやりたいんですけど・・
0964デフォルトの名無しさん
NGNGそれだとCreateWindowに渡したスタイルが入ってないんじゃないの?
0965デフォルトの名無しさん
NGNGCreateWindowにはどんなスタイルの組み合わせを渡してるのさ?
0966957
NGNG0967デフォルトの名無しさん
NGNG0968デフォルトの名無しさん
NGNGじゃあ
DWORD dwStyle = WS_POPUP | WS_CAPTION | WS_SYSMENU;
SetWindowLong(hWnd, GWL_STYLE, (LONG)dwStyle);
では?
というか、いちいちCreateWindowに何スタイルを渡しているか調べなくてもいいように
GetWindowLong(hWnd, GWL_STYLE)で既存のスタイルを取得するんだけど・・・
0969デフォルトの名無しさん
NGNG漏れのホストでは無理だ。
0970デフォルトの名無しさん
NGNGWin32API 質問箱 Build7
http://pc3.2ch.net/test/read.cgi/tech/1036654893/
0971デフォルトの名無しさん
NGNG乙アリ
0972957
NGNGCreateWindowのdwStyleとGetWindowLongの戻り値とでは
スタイル=0の場合の初期値が違うようなのでこの戻り値は
使わなくてはいけないようです。
DWORD dwStyle = GetWindowLong(hWnd, GWL_STYLE);
DWORD dwNewStyle = (dwStyle & ~dwRemove) | dwAdd;
SetWindowLong(hWnd, GWL_STYLE, dwNewStyle);
ていう感じにするしかないようです。
レスくれた方有難う御座いました。
0973942
NGNG激しく鬱。
…逝ってくる。
0975デフォルトの名無しさん
NGNG多重起動防止の回避?多重起動防止をしなけりゃいいんじゃねぇ?
それとも、多重起動防止策が施されたアプリを多重起動したいってことか?
→そんなことしてどうなる?
0976デフォルトの名無しさん
NGNG0977デフォルトの名無しさん
NGNG0978デフォルトの名無しさん
NGNGランタイムDLLのエントリー関数で初期化されるから_beginthreadexつかう
必要性を感じないんだが。
0979デフォルトの名無しさん
NGNGただその理由は、「ランタイムDLLのエントリー関数で初期化されるから」
ではない。
というか、何がエントリー関数で初期化されるといいたんだ?
0980デフォルトの名無しさん
NGNGDWORD WINAPI TestFunc(LPVOID ThreadData)
{
ThreadInfo &Info = *(ThreadInfo *)ThreadData;
std::string RetStr("result: "); const char *sep = ",";
char IDBuf[64]; sprintf(IDBuf, "Thread 0x%08X Info", GetCurrentThreadId());
WaitForSingleObject(Info.hMutex, INFINITE); Sleep(100); char *s = strtok(Info.TestStr, sep); ReleaseMutex(Info.hMutex);
while(s) {
RetStr += s; RetStr += " - ";
WaitForSingleObject(Info.hMutex, INFINITE); Sleep(100); s = strtok(NULL, sep); ReleaseMutex(Info.hMutex);
}
MessageBox(NULL, RetStr.c_str(), IDBuf, MB_OK);
return 0;
}
int main()
{
DWORD Thread1ID, Thread2ID; HANDLE hMutex = CreateMutex(NULL, TRUE, NULL);
ThreadInfo Info1 = { hMutex, "ab,cd,ef,gh" }, Info2 = { hMutex, "12,34,56,78" };
HANDLE hThread1 = CreateThread(NULL, 0, TestFunc, &Info1, 0, &Thread1ID);
HANDLE hThread2 = CreateThread(NULL, 0, TestFunc, &Info2, 0, &Thread2ID);
ReleaseMutex(hMutex);
WaitForSingleObject(hThread1, INFINITE); WaitForSingleObject(hThread2, INFINITE);
return 0;
}
0981980
NGNGstruct ThreadInfo { HANDLE hMutex; char TestStr[12]; };
_beginthreadex() って要らないの?
0982デフォルトの名無しさん
NGNGニュアンスがよく分からんが、プロセス注入→ReseaseMutexなんてどうっすか?
0983デフォルトの名無しさん
NGNG「プロセス注入」 って何?
0984デフォルトの名無しさん
NGNG多分そーゆー問題じゃないと思うけど、とりあえず。
0985デフォルトの名無しさん
NGNG0986デフォルトの名無しさん
NGNG> というか、何がエントリー関数で初期化されるといいたんだ?
CRT_INITとか呼ばれてるんだが…
以前、_beginthreadexつかってたら、CRT_INITがスレッド作るたびに2回呼ばれてて、
それ以来、CreateThread使ってる。
0987デフォルトの名無しさん
NGNG名前を指定してCreateMutexしなきゃ
0988デフォルトの名無しさん
NGNG名前付きミューテックスと名前無しミューテックスとで、何か動作が変わるの?
0989デフォルトの名無しさん
NGNGその先のはなし。
CRT_INITは、DLL_THREAD_ATTACH時には、
ホトンド何もしないで帰るはずだが。
0990デフォルトの名無しさん
NGNGEscapeCommFunction
を使っているアプリを作ったのですが、どうもWin2000では
動作していないように思えます。
Win2000でこれらのAPIを動かすにはどうすればいいのでしょうか?
0991デフォルトの名無しさん
NGNGすまん、一般用語だと思い込んでたが、ググッても全然引っかからなかった。
SetWindowsHookEx等使って、他のプロセス上で独自の実行コードを走らすテクのことを言いたかった。
0992デフォルトの名無しさん
NGNG忠告ありがとう。これからは気をつけるよ。
0993デフォルトの名無しさん
NGNGもう寿命ないから次スレ逝ってね。
http://pc3.2ch.net/test/read.cgi/tech/1036654893/l50
>>991
「フックでコンテキスト取る」 みたいな言いまわしがわすりやすいと思う。
っていうか 「注入」 という言葉で表現するような処理内容じゃないぞ。
「侵入」 のがまだいいと思う。
0994デフォルトの名無しさん
NGNG0995デフォルトの名無しさん
NGNG0996デフォルトの名無しさん
NGNG高校生のときの話なんだけど、25歳の女の先生がいたわけ。
俺のクラスの副担任で、
0997デフォルトの名無しさん
NGNG俺のクラスがやんなきゃならないのさ。
んで、いつものようにその教室の掃除当番だったので行った。
でも他の奴はみんなさぼって行ったのは俺だけだったのよ。
当時の俺は、
0998デフォルトの名無しさん
NGNGで、そうなるとその教室には俺とその25歳の先生しかいなくなるわけだ。
人があまりいない放課後によ。
その先生、特別美人てわけじゃないんだけど、小柄でかわいい系の人だった。
んで、掃除も終わりかけてさぁ帰ろうかってところで、
0999デフォルトの名無しさん
NGNG1000デフォルトの名無しさん
NGNG10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。