乙
7 :
デフォルトの名無しさん :2005/07/31(日) 03:59:31
ディレクトリを作成したいのですがCreateDirectoryを使おうとおもいます。 作成するディレクトリ名はユーザーに指定させ、すでにある場合は作成しません。 そのためCreateDirectoryを呼ぶ前にそのディレクトリがあるか調べたいです。 _statのようなANSI-CのものではなくCreateDirectoryと同じくWin32のAPIがよいです。 なにかよいものはありますか? ちなみにFindFirstFileは面倒なのでいやです。一発で判定できるとうれしいです。 あと、もうひとつ。 ある文字列がパスとして有効かどうか判定するAPIはありますか? たとえば、使ってはいけない文字が含まれていればFALSEが返るなど。 よろしくお願いします。
>>7 直接的な答えは PathIsDirectory とか PathFileExists か。
でも、MakeSureDirectoryPathExists 使えばいいんじゃない?
後半は知らん。
産休ですか?
夏ですね
>>13 2chは●の売り上げによって設備をレンタルしているので、
●を買って見てください
ということにしておいたほうがいいと思う。
にくちゃんねるは好きだけど、知っている人だけが使う、というのでいいと思う。
16 :
デフォルトの名無しさん :2005/07/31(日) 15:54:56
ふと思ったんだが、winnyのリストビューの中の進歩グラフってどうやって実現してるんだろ。。。 それ考えると47氏すげーな。
Winnyはすごいけどオーナードローはすごくない
19 :
デフォルトの名無しさん :2005/07/31(日) 16:14:15
>>18 オーナードローか。。
リストビュー、オーナードローでその機能実現してるサンプルあるかな??
勉強してみたいんだけど。
22 :
デフォルトの名無しさん :2005/07/31(日) 18:14:50
>>20 リストビュー単体、オーナードロー単体はよくあるけど、漏れが探してみた感じでは
リストビューで進捗グラフ表示しているのはVB以外はなかった。
VC、sdkでは見つからないなぁ・・。
Winny2だとVCLだろうからTCustomListView.OnCustomDrawItem/SubItemあたり使ってそうだな‥‥
オーナードローのやり方さえ分かりゃ、後は好きにグラフなりなんなり描きゃいいと思うんだが。 別に両方同時にやってるサンプルは必要ないべ?
25 :
デフォルトの名無しさん :2005/07/31(日) 18:47:05
>>23 , 24
とりあえず、リストビューオーナードローで作ってみる。
情報トンクス。詰まったときは相談のってくらさい。
26 :
デフォルトの名無しさん :2005/07/31(日) 18:53:08
WinnyはWin32API的には凄くない。 セマフォの使い方が間違っていたり、etc・・・
シリアルポートの /dev/ttyS1 を複数のプロセスから open して 入出力するときだけ flock かけるようなことを UNIX でやっているのですが、 同じことを Win32 でやろうとして、 CreateFile で COM? を共有で開こうとしても上手くいきません。 Win 的にはどういうやり方をすると良いでしょうか。
>>28 CreateFile()のパラメータは?
適当に設定しておけば開けると思うのだけど。
#ダメだったらゴメン。
BitBlt関数をSRCINVERTでマスク画像を表示させていたのですが、 急にマスクが掛からなくなりました。 BitBlt(hdc , 188 , 238 , 25 , 25 , hMem5 , 0 , 50 , SRCAND); BitBlt(hdc , 188 , 238 , 25 , 25 , hMem6 , 0 , 0 , SRCINVERT); なぜでしょうか? 分かりません。おながいします。
31 :
デフォルトの名無しさん :2005/07/31(日) 20:58:22
>>30 マスクが死んでるんじゃないの?
それだけじゃ判断できん
>>29 CreateFile("COM1", GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
FILE_SHARE_* を取ると開けるのですが・・
33 :
891 :2005/07/31(日) 21:14:19
皆様こんばんは。前スレでAPIHookについて悩んでおりました者です。 強制終了が起こる原因が分かりましたのでご報告いたします。 まず、プログラムがクラッシュしていた原因は、 APIフック部ではなく、LogWrite関数、ログ記録部でした。 そして、ここでfwriteによって書き込みを行っているのですが、 このfwriteを連続して2回以上コールすると、クラッシュしてしまうようなのです。 なので、書き出すデータを一つの変数へまとめ、一度のfwriteで書き込みを行うよう修正しました。 以上です。 サポートしていただいた方々ありがとうございました。 また何かありましたら質問させていただきますのでその節はよろしくおねがいいたします。
>31 レスdクス。 「マスクが死ぬ」とはどういう事ですか? 詳細きぼん
ClipCursorでカーソル移動範囲を自ウィンドウ内に限定したいのですが、 カーソルが設定範囲に移動するものの、その後は自由に範囲外へ移動できてしまいます。 範囲外へのカーソル移動を阻害するにはどうすればいいのでしょうかorz ClipCursorはウィンドウ生成時(VCLのTFormコンストラクタ内)にてGetWindowRectで取ったRECT構造体を渡しています。 OSはWidnows2000です。
実モニタの最大解像度を取得する方法ってあるのでしょうか? やりたいことは、最大解像度よりも大きな解像度を選択し仮想スクリーン になっているときに、画面に中央部分を表示させるようにしたいんです。 とりあえず下記の方法で半ば強引にさせてます。 x = GetSystemMetrics( SM_CXSCREEN ); y = GetSystemMetrics( SM_CYSCREEN ); for( i=0; i<(y/2); i+=8 ){ SetCursorPos( i, i ); SetCursorPos( x-i, y-i ); }
37 :
30 :2005/07/31(日) 21:42:32
スマソ。 事故解決しますた。 普通画像とマスク画像が逆だった。
とりあえずお約束
>>35 スパイウェアでも作って強制的にOKを押させたいんですか?
>28 ms-help://MS.MSDNQTR.2003FEB.1041/devio/base/communications_resource_handles.htm >The fdwShareMode parameter must be zero, opening the resource for exclusive access. なので無理です。
41 :
35 :2005/07/31(日) 23:20:07
>>38 ゲームでウィンドウ外にカーソルが飛んで他のアプリに誤爆するのを防ぐためです。
マウス主体の操作の場合、これが結構ストレス貯まるので‥‥
>>41 全画面表示にすればいいだけじゃないのか?
>>35 本来のカーソルそのものは消して自前描画するのはどうかね?
マウスの移動メッセージのみを拾って。
>>41 SetWindowsHookEx()を使い、WM_MOUSEMOVE拾って移動制限かけるのは?
45 :
35 :2005/07/31(日) 23:41:39
>>42 ウィンドウ前提のミニゲームなのでフルスクリーンは
>>43 自前描画してもカーソルが移動してクリックされれば他のアプリやデスクトップにマウスメッセージが
>>44 とりあえずそっちの方向でごまかしてみます
しかしなんでClipCursorが期待通りの動きをしないやらorz
本当にClipCursorの動作がおかしいね。 とりあえずメッセージループの中などで毎度ClipCursorすれば・・ちょっと気持ち悪いけどね。
47 :
デフォルトの名無しさん :2005/08/01(月) 00:09:18
>>45 >ClipCursorはウィンドウ生成時(VCLのTFormコンストラクタ内)にてGetWindowRectで取ったRECT構造体を渡しています。
ちゃんとスクリーン座標で渡してるか?
きちんとMSDNなり読んでからケチつけろよ。
48 :
29 :2005/08/01(月) 00:09:28
>>40 ふむ、MS-DOS以来の使用そのままか。
>>28 つーことで、素直に毎回open/closeかな。どっちみちデバイス制御周りは互換性ないから
戦略が違っても何とかなるでしょ?
49 :
デフォルトの名無しさん :2005/08/01(月) 00:15:23
>>45 コンストラクタ内とかかいてあるんで、VCLはよく知らんけどウィンドウができる前に設定したりしてるんじゃね-の?
VC6(MFC)では以下のコードでちゃんと動いた。
View::OnLButtonDblClick()
{
if(bClick){
::ClipCursor(NULL);
bClick = FALSE;
}else{
RECT rc;
GetWindowRect(&rc);
::ClipCursor(&rc);
bClick=TRUE;
}
}
50 :
デフォルトの名無しさん :2005/08/01(月) 00:25:34
項目名の右にその項目の内容に関する文字列を表示する リストボックスみたいな物を作りたいんですけど、 これってリストビューというやつが適してますか? それともリストボックスで簡単にできますか?
>>50 そんなもんも自分で選べないお前にはsprintf
>>35 TFromのコンストラクタではまだウインドウ生成されてないぞ。
OnCreateでやれ。
アプリが切り替わったときにClipCursorがリセットされるみたいだから、OnCreateでやっても駄目だべ。 やるならApplication.OnActivateか。
Win2k以降のNT系OSでデバマネからの「ハードウェア変更後のスキャン」 と同等のことをさくっと行うのにはどうしたら良いですか? デバマネ開いて右クリックして…はちょっとめんどくさいので…
SetupDiなんちゃら
>>55 SETUPAPI.DLL
CM_Locate_DevNode
CM_Reenumerate_DevNode
リッチエディットコントロールで、指定した文字がある場所の行番号を得たい場合は どうすればいいのでしょうか?
確か前スレにあったぞ、そんな感じの質問
他のウィンドウに隠れたウィンドウをキャプチャしたいです。 GetWindowDCとか試したんですが、前にあるウィンドウがかぶります。 ウィンドウを前に出さずにキャプチャする方法か無いでしょうか?
EnumWindowsでウィンドウを列挙して力尽くで調べ上げてください。
は?
ヒント: WM_PRINT or PrintWindow or レイヤードウィンドウ
ヒントにしてはずいぶん親切だな
Requirements Windows NT/2000/XP: Included in Windows XP and Windows Server 2003. Windows 95/98/Me: Unsupported. Header: Declared in Winspool.h; include Windows.h. Library: Use Winspool.lib. [゚Д゚]<
66 :
60 :2005/08/02(火) 16:43:27
ヒントありがとうございます。 --- HDC dcmem; dcmem = CreateCompatibleDC(NULL); SendMessage( hTargetWnd, WM_PRINT, (WPARAM), PRF_ERASEBKGND | PRF_CLIENT ); // hTargetWnd は対象のウィンドウ --- と、したんですが取れていないっぽいです。 ビットマップを握らせてみたりしたんですけど、真っ黒(初期状態?)でした。 何か気をつけないといけない事とかありますか?
W<_PRINTは対象のウィンドウがサポートしてるとは限らない。 サポートしてなければどうしようもない。 それこそ無理やりレイヤードウィンドウにでもしない限り 背面に回したままキャプチャは不可能
68 :
デフォルトの名無しさん :2005/08/03(水) 01:00:02
30Mぐらいのファイルを大量に外付けのHDに コピーしたいのですが、一番早いコピー方法を 教えてほしいとです。 よろしくお願い致します。
DnD
読み込みスレッドと書き込みスレッドを分ける
CopyFileが最速だと思う
72 :
デフォルトの名無しさん :2005/08/03(水) 09:15:11
ありがとうです。 SHFileOperationが最速だと思ってた・・・ CopyFileなのか〜。
実測しろ 独自ルーチンのほうが速いかもしれんぞ
でも少なくともSHFileOperationよりはCopyFileの方が早いだろうと思う。
初めまして。 Windowsの右下の常駐アイコンが表示されるところ(時計とか表示されるところ)に 作成したプログラムを起動したときアイコンを表示させたいのですが どのようにしたらいいか教えていただけないでしょうか。 MSDNで検索してもうまく見つけられませんでした。
そんなもんググればすぐ見つかるのに・・・
>>75 おまいさんが質問しなければいけないのは、
Windowsの右下の常駐アイコンが表示されるところ
(時計とか表示されるところ)
の呼び名じゃないか?
>>75 あそこはタスクトレイと言うんだ。
そこに表示されるアイコンはトレイアイコンと言う。
ハイ、も一回検索。
79 :
75 :2005/08/03(水) 10:36:06
はい、検索してきます。^^;
80 :
75 :2005/08/03(水) 10:42:42
見つかりました。 みなさんありがとぉ^^
82 :
55 :2005/08/03(水) 16:09:20
>>前スレ 945 おかげさまで解決しました。 CoInitializeSecurity()でバッチシでした。 質問 同一CPU上でアカウントAからアカウントBで動いている、COMサーバーに 接続するには? 解決方法 1 ImpersonateLoggedOnUserでスレッドのユーザ偽装。 2 CoInitializeSecurity()のdwCapabilitiesをEOAC_STATIC_CLOAKING またはEOAC_DYNAMIC_CLOAKING 3 CoCreateInstanceで偽装したユーザにつながる。
グローバルフックでWM_IME_NOTIFYが来たときにGetCaretPos()でキャレットの位置を 取得したいのですが、画面上にキャレットがないときにもこの関数が成功してしまうみた いなので困っています。 現在画面上にキャレットが表示されているかいないかを判別する方法はありますか?
86 :
デフォルトの名無しさん :2005/08/03(水) 23:46:55
脊髄でレスだが、フォーカス持ってるウィンドウのクラス名で 判断できないかな?
87 :
60 :2005/08/04(木) 00:00:48
88 :
デフォルトの名無しさん :2005/08/04(木) 00:19:13
検索しても見つからなかったので質問します。 ウィンドウを4分割して使いたいのですが 4分割のやり方が書いてあるページ、書籍などありましたら教えていただけませんか? よろしくお願いしますm(_ _)m
>>88 自分で管理するんだよ、そういうコントロールがあるわけじゃない。
>>84 CoCreateInstanceするスレッドを偽装するってこと?
CoCreateInstanceExってのもあるよ。
ところでなんのためにc/sでユーザ同一にしてんの?
質問ですが
OutputDebugStringした文字列見るCUIプログラムがあったと思うのですが
なんて名前でしょう?
>>90 PlatformSDK付属のDbMonとかCUIだった気が
>>88 MFCのCSplitterWndのソースとか??
>>89 >>92 ありがとうございます。
なにぶん初心者なもので、MFCのCSplitterWndは知りませんでした。
ソースを参考にしていろいろやってみたいと思います。
sendinputでの入力ストリームをブロック出来るようですが 具体的にどうのようにすればブロック出来るか教えて頂け ないでしょうか?
VistaのWin32 API(WinFXではなく)の説明ってどこかにないのでしょうか。 β1ではWinFX自体別インストールなのにWinFXのドキュメントしかないって なめてるのか?
別にLonghornになったからってWin32の動作は変わらないと思うが。 過去との互換性は大事だから、 MSはできる限り動作を変えないようにがんがるはず。 まあ問題があったから動作を変えたものもあるけどね、 SetForegroundWindowとか。
Win16APIは追加されたんじゃなくて互換性のために残ってただけだろ
Win95でWin16APIに拡張が施されたという意味だろ。 で、どういうのが追加されたわけ?
公式にはGDI32にしかないとされているAPIの一部(ベジェなど)とか、 GDI/USERの32ビットヒープを見るためのToolhelp APIとか。
103 :
デフォルトの名無しさん :2005/08/04(木) 07:17:38
メッセージキューに溜まっているメッセージの数を 取得するAPIってあるでしょうか? APIでなくても何か方法があれば知りたいのですが・・・ よろしくお願いします。
>>103 事前に調べるのは無理だろう。
まあ、あえてやろうと思えば(意味があるかどうか知らんがw)
for(i = 0; PeekMessage(&msg, NULL, 0, 0, PM_REMOVE); i++) ;
105 :
103 :2005/08/04(木) 08:14:20
なるほど、ありがとうございます。 処理が重すぎてメッセージが溜まるようなら調整するようにしようと思ったのですが、 他の方法を考えてみます(´Д⊂
106 :
85 :2005/08/04(木) 08:42:42
>>86 ありがとうございます。
最終手段としては考えていますが、それだとエディタやIE内のエディットボックスなど
判断できない場合があるのし、新しいアプリにも対応できないのでできれば他の方法がいいのですが。
根本的な解決方法はないのでしょうか?
LoadBitmap() を使いたいのですが分からないことがあります。 リソースファイルに nameID BITMAP filename を書き加えて、 LoadBitmap(hInstance , "nameID"); みたいなかんじでwebサイトとかに載っているのですが、 うまくいきません。(BitBlt()とかで転送しても表示されない) リソースファイルを作ったときにできたresource.hを #inlcude "resource.h" インクルードして LoadBitmap(hInstance , MAKEINTRESOURCE(nameID)); とか LoadBitmap(hInstance ,(LPCTSTR)nameID); だったらうまくいきます。 というか、リソースファイルの記述が.Netじゃできなくて 別のエディタで書いてたりします。使い方とかも教えてほしいです。 長くてすいません。
nameID BITMAP filename ↓ "nameID" BITMAP filename こうすればいいような希ガス。
VC6です。実はMFC内のコードですが、こちらが適切と思いお邪魔致しました。 クリップボードのbitmapをファイルに保存したいです。ハンドルから直接データを 頂けるとラクなので以下のようにした(動作はしている)のですが、こういうやり方ってOKなんでしょうか? Web上のみなさまはGetDIBitsを主に使っておられ、以下のようにしてる人は見当たらなかったもので・・・ BITMAPFILEHEADER bmfh; /* bmfh.bfSize 以外に定型データ代入 */ ::OpenClipboard(m_hWnd); HBITMAP hBitmap = (HBITMAP)::GetClipboardData(CF_DIB); // 存在確認済み GlobalLock(hBitmap); const BITMAPINFOHEADER* pbmih = (BITMAPINFOHEADER*)hBitmap; // pbmih->biSizeImageの値が欲しいだけ bmfh.bfSize = bmfh.bfOffBits + pbmih->biSizeImage; /* (const void*)bmfh と (const void*)hBitmap をファイルに書込む、あるいは別の領域にコピー */ ::GlobalUnlock(hBitmap); ::CloseClipboard();
アプリケーションの終了方法としては下記のプログラムは正しいでしょうか。 実際に正常に終了している様には見えますが 自信が持てません。^^; int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR lpCmdLine, int nCmdShow) { (省略) HWND hwnd; hwnd = CreateWindow ("Window 1", ・・・); (省略) hyouji1 ((hwnd1); return 0; } void hyouji1 (HWND hwnd1){ MSG msg; (省略) while(TRUE){ if (PeekMessage(&msg, NULL, WM_MOUSEFIRST, WM_MOUSELAST, PM_NOREMOVE)){ if (GetMessage(&msg, NULL, 0, 0) == 0) break; TranslateMessage(&msg);DispatchMessage(&msg); } else { (省略) //左クリックが押されない限り 計算を続ける } } } LRESULT CALLBACK WndProc (HWND hwndBlack, UINT msg, WPARAM wp, LPARAM lp) { switch (msg) { case WM_LBUTTONDOWN: PostQuitMessage (0); return 0; //アプリ終了 return DefWindowProc (hwnd1, msg, wp, lp); }
そもそもそんな作り方をするのはおかしい。 それじゃウインドウがまったく反応せず、クリックしたら終了という、 何のためのGUIなんだかわからんプログラムになるんじゃないか? それでいいなら、別にGUIにしなくたっていいじゃん。 GetMessageの戻り値の処理がそれだと多少まずい場合があるけど それ以前に変だから。考え方が。
>>111 PostQuitMessage()は普通WM_DESTROYが来たときに呼ぶ。
アプリケーションを終了させたいところではWM_CLOSEをPost/Sendする。
WM_CLOSEはウィンドウの×を押したときにも送られ、DefWindowProcへ送るとDestoyWindow()が呼ばれる。
そしてDestoyWindow()がWM_DESTROYを送る。
あとメッセージはPeekMessageしたあとGetMessageをしなくてもPeekMessageで全部受ければいいだろ。
MSG msg;
while (TRUE) {
if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) {
if (msg.message == WM_QUIT)
break;
TranslateMessage(&msg);
DispatchMessage(&msg);
} else {
(省略) //左クリックが押されない限り 計算を続ける
}
}
114 :
111 :2005/08/05(金) 11:21:12
>>112-113 ありがとうございます。
説明が足らない部分があったので補足すると、ウインドウは
hwnd = CreateWindow ("Window 1", NULL, WS_POPUP, 0, 0, 500, 300,NULL, NULL, hInstance, NULL);
という内容で、×マーク等の無いクライアント領域のみのウインドウです。
それで「クリックで終了」ということを考えました。
クリック後ウィンドウを閉じる処理をしてからWM_DESTROYを送るように変更してみます。
ホントにありがとうございました。
当たり前のように指摘されると あまりの自分の知識のなさに泣けてきます・・・・ うわ〜〜ん
でもがんばります^^
>>114 WM_DESTORYはDestroyWindow()を呼んだ結果として起こるものであって、自分で送るものではない。
116 :
デフォルトの名無しさん :2005/08/05(金) 11:54:18
ウインドウスタイルについて質問なのですが、 タイトル部、ウインドウの枠も無いウインドウを作る事は可能でしょうか、 CreateWindowExのウインドウスタイルを見るかがり目的の設定が無いと思うのですが、 ほかに方法はありますでしょうか、 以上です、よろしくお願いします。
118 :
デフォルトの名無しさん :2005/08/05(金) 12:23:00
>>116 WS_POPUPかリュージョン使えばおk
119 :
デフォルトの名無しさん :2005/08/05(金) 14:59:12
>>118 デキィタァー!
感謝です。
>WS_POPUPかリュージョン使えばおk
WS_POPUPの指定で目的は果たせて解決出来ました。ありがとうございます。
ところで「リュージョン」っていうのは何でしょうか、出来ましたら参考に教えていただけませんでしょうか。
よろしくお願いします。
regionの間違いかと。
illusionの間違いかと
イリュージョンといえばおっぱいスライダー
123 :
デフォルトの名無しさん :2005/08/05(金) 15:43:47
>>110 おっ!
たまに挙動がおかしいですがこれなら実用性に問題はなさそうです。
ありがとうございました。
リージョンは古い。今なら、Layered Window。 ただし、まだ9X系列をサポートするつもりなら使えないけど。
9xではリージョンを使ってWin2k以上ならLayered Windowという実装はアリでしょう
127 :
デフォルトの名無しさん :2005/08/05(金) 19:43:54
こんばんは、よろしくお願いします。 ツールバーを非表示にしたいのですが、 HWND h = CreateToolbarEx(..) で作ったツールバーを非表示にしたいと思うのですが、 SendMessage(h,・・・・・ 書き方が分かりません。おしえてください。
ShowWindow
129 :
デフォルトの名無しさん :2005/08/05(金) 20:06:48
ウインドウに表示されたActiveX(Flash.ocx)のボタンの上にマウスカーソルが来た事を判断させたいのですが、 取り合えずDefWindowProcでやってみたのですが、ActiveXのボタンかどうかの判断は出来ませんでした。 何方か、解決方法ご存じありませんでしょうか。 よろしくお願いします。
130 :
デフォルトの名無しさん :2005/08/05(金) 20:16:00
131 :
デフォルトの名無しさん :2005/08/05(金) 20:25:45
SetLayeredWindowAttributes で LWA_COLORKEY を指定したときに、 効果があったりなかったりして困っています 透明色の値は黒とは限らず例えば ChooseColor でユーザに選択させた値などです LWA_ALPHA と混用していて、「効果がなかった」ときも微妙に色が変わったように見えます どなたか、お心当たりがあれば教えてください 環境は Windows2000, VC6, cygwin g++ です SDK は最新版です
>>129 ActiveX側でWM_MOUSEOVER
Flash.ocx側のWM_MOUSEOVERを勝手にキャッチできるの?
un
135 :
前スレ813 :2005/08/06(土) 05:59:24
皆さん、ありがとうございます。 >>前スレ816 Win98なのですが、音は出ないみたいです。サウンドカードからも出ません。system()はcommand.com呼び出しですよね? system("\a")だと、そういうコマンドがないので、「コマンドまたはファイル名が違います」となりますね・・・ NT系はsystem()でcmd.exeとかが呼び出されるのですか? >>前スレ822 すみません、Win98です。WIN32.HLPにはNT系のところにサウンドカードのことが書かれてなかったのでわかりませんでした・・・
> system("\a") printf("\a") だろ
>>135 Win2000 だと出る。
system("echo \a"); でどうだろか。これも Win2000 だと出る。
>>136 Winアプリだとそれじゃあ出ない。(少なくとも Win2000 では)
まぁ確かに、標準出力が実際にはどこにも出力されないWinアプリじゃ>136じゃ鳴るわけないなぁ。 さて、command.comのechoはbellを処理できただろうか。
139 :
デフォルトの名無しさん :2005/08/06(土) 08:43:00
リストボックスなどに標準装備されているスクロールバーの ハンドルを取得するにはどうすれば良いのでしょうか
140 :
デフォルトの名無しさん :2005/08/06(土) 08:51:16
VC++で64bitの定数はどのように記述すればいいのでしょうか?
141 :
140 :2005/08/06(土) 08:53:08
出来れば10進と16進の両方の記述を教えてください。
普通に書けばいい
たとえばこういうふうに。接尾辞はたぶんなくても平気だろう。(必要ならi64) const long long FOO = 9223372036854775807; const unsigned long long BAR = 0xffffffffffffffff; VC6までならlong longはないから<windows.h>のLONGLONGとULONGLONGとかで。
144 :
140 :2005/08/06(土) 09:06:17
const UINT64HOGE=0xffffffffffffffff; で、HOGE=0xffffffffに丸められてしまいます。 プロジェクトのプロパティの何かを変える必要があるのでしょうか? 私の環境はVS.Net2002です。お願いします。
145 :
140 :2005/08/06(土) 09:12:11
const UINT64 HOGE = 0xffffffffffffffffI64; でも駄目でした。アカデミックパックだと出来ないのでしょうかねぇ。
146 :
デフォルトの名無しさん :2005/08/06(土) 09:13:42
>>140 定数の書き方は limit.h を読んでみるといい
変数は __int64 型
147 :
デフォルトの名無しさん :2005/08/06(土) 09:14:14
もとい limits.h
>>144 符号なしだから0xffffffffffffffffui64じゃないか?
>>144 「丸められて」をどう確認した?
出力に使った手段が32bit型しかサポートしていない可能性も‥‥
(BCBのiostreamとか)
printfの指定を64ビットにしてないんだろ。 printf("%I64d\n", HOGE); または printf("%I64x\n", HOGE);
151 :
140 :2005/08/06(土) 09:55:08
やっぱりどうも出来ないので、上位と下位に分けて ビットシフトとビットオアで間に合わせました。有難うございました。 const UINT64 HOGE_U =0x12345678; const UINT64 HOGE_L =0x87654321; UINT64 HOGE; HOGE=HOGE_U<<32|HOGE_L;
152 :
デフォルトの名無しさん :2005/08/06(土) 10:04:41
>>151 出来ないって何が?
その方法で何が出来るようになったんだ?
例えば 150 の指摘があたっていたら
それでもまだ失敗するはずだぞ
153 :
デフォルトの名無しさん :2005/08/06(土) 10:05:17
ちなみに __int64 に対してはオーバーロード解決がサポートされないんだったよな
>>151 それだったら0x12345678 << 32 | 0x87654321でもできそうな気がするが。
#include <windows.h> #include <iostream> using namespace std ; int main() { const UINT64 HOGE = 0xffffffffffffffff ; printf("%I64u\n", HOGE) ; printf("%I64x\n", HOGE) ; cout << HOGE << endl ; } 接尾辞もキャストも無しでちゃんと出るけどなぁ。 BCC5.6.4、vctk2003 で。
const __int64 HOGE = 0xffffffffffffffffi64 ; ヒント:mmintrin.h
ちゃんと64ビット定数として書けばいい。 それがどーしても嫌というのなら、LARGE_INTEGER構造体・共用体を使う。
単にVC++7.0の仕様かバグだったら笑える
匿名パイプで子プロセスが書き込みを受け付けてない時に書き込み側へWriteFileするとスレッドが停止してしまうのですが、それを防ぐ方法はありますか?
WriteFileの最後の引数つかうとか
更に書き込み用のスレッド起こしてWaitForSingleObjectとか(アホげ
以下のプログラム const wchar_t* p = L"abcあいう"; ::MessageBox( NULL, p, L"", MB_OK); printf("error:%s\n", p); printf("error:%S\n", p); wprintf(L"error:%s\n", p); wprintf(L"error:%S\n", p); を実行すると error:a error:abc error:abcerror:a と化けます。(ダイアログには出る) コンソールに正しく出すのはどうすればよろしい?
163 :
159 :2005/08/06(土) 21:30:12
>>160 パイプでWriteFileの最後の引数使うとWindows98ではエラーになるんですが・・・。
>>162 #include <locale.h>
setlocale(LC_ALL, "");
Win98では対処のしようがない。 ソケット使うとか、別にイベントを用意して手動でたてたりおろしたりするとか。
子プロセスの状態の判別がわからないんなら 普通に書き込み専用のサブスレッド立ててタイムアウト指定が一番簡単だと思うけど
167 :
162 :2005/08/06(土) 22:07:19
パイプ相手にタイムアウト指定ってどうすればできるの?
パイプじゃなくて、パイプへの書き込み用に起こしたスレッドにタイムアウト指定するの。 正確には、呼び出し側でWaitFor〜でタイムアウト時間指定して待機し、帰ってこなかったら TerminateThreadとか。
ms-help://MS.MSDNQTR.2003FEB.1041/fileio/base/writefile.htm >Windows Me/98/95: For operations on files, disks, pipes, or mailslots, >this parameter must be NULL; a pointer to an OVERLAPPED structure causes >the call to fail. However, the function supports overlapped I/O on serial and parallel ports.
>>171 ちゃんと日本語ヘルプにも載ってたわ。すまん。
Windows 95/98:非同期の書き込み操作を行う場合、FILE_FLAG_OVERLAPPED フラグを指定し CreateFile 関数を呼び出して開いた通信リソース、または socket と accept どちらかの関数が返したソケットのハンドルを指定します。
メールスロット、名前付きパイプ、ディスクファイルに対する非同期書き込み操作はサポートしていません。
shell32.dllに入ってるファイルコピーとかのAVIリソースを使いたいんだけど、 どのようなAPIを使って取り出し、再生をすればいいのでしょうか。
174 :
159 :2005/08/07(日) 04:38:16
175 :
139 :2005/08/07(日) 08:40:41
|∀・)
177 :
139 :2005/08/07(日) 08:47:26
∧∧ /⌒ヽ) i三 ∪ ○三 | (/~∪ 三三 三三 三三三
WM_HSCROLL/WM_VSCROLLメッセージ拾ったときに各スクロールバーのハンドルが拾えるけど、それで大抵間に合うんでないの?
>>173 うろお?hぉえだけど。
LoadLibrary
FindResource
LoadResource
LockResource
あたりでリソース読む。
再生はよくわからん。
普通にアニメーションコントロールを作りゃいいんじゃないの?
CreateWindowとかして。
180 :
139 :2005/08/07(日) 10:35:30
>>178 ありがとうございます。
スクロールバーがでるくらいリスト項目が十分にあれば
強制的にWM_VSCROLLを出させて、ハンドルを拾えました。
目的を書けばよかった。
リストボックス付随スクロールバーの外見を、
Webブラウザでスタイルを変更したときのスクロールバーの様に見せたかったんです。
>>173 自分( 自作の.exeや.dll )で持っているリソースとまったく同じやり方でおk。
取得先が shell32.dll なだけ。
182 :
デフォルトの名無しさん :2005/08/07(日) 17:47:08
こんにちは、質問です。 ディレクトリーが存在するかどうかを調べようと思い、 Directory.exists("mm\\"); とかきこみましたが、 Directory定義されていない識別子 と出ます。#include <io.h> しています。 使い方を教えてください。
>>182 あーたそれCとC#がごっちゃになってまへん?
Win32APIならPathIsDirectoryっていう、そのまんまなAPI関数がありますわ。
#include <io.h>も不要。 むしろwindows.hのほうが必要。
185 :
デフォルトの名無しさん :2005/08/07(日) 18:13:02
>>184 さんありがとうございます。
PathIsDirectoryでできました。
でも、#include <shlwapi.h>やリンカの設定も必要でした?
187 :
デフォルトの名無しさん :2005/08/07(日) 19:04:41
188 :
173 :2005/08/07(日) 22:05:53
>>179 ありがとうございます。そのへん調べてみます。
>>181 アイコンはExtractIcon(だったかな?)でやったことあるんだけど、
AVIは扱ったことないもんで。
BCB6使ってるんだけど、TAnimateコンポーネントはあまり
自由なことができなさそうなので、APIを使う方法を調べておこうかと
思いまして。
>>188 確か、こんな感じでいけるよ。
HMODULE shell32.dllのモジュールハンドル = LoadLibrary("shell32.dll");
Animate_OpenEx(アニメーションコントロールのウィンドウハンドル, shell32.dllのモジュールハンドル, MAKEINTRESOURCE(shell32.dll内のリソースID));
Animate_Play(アニメーションコントロールのウィンドウハンドル, 0, -1, -1);
SaveFileNameを使用したら、いきなり例外が発生して強制終了したので tryブロックで囲んで例外をキャッチしようとしたら例外が発生しなくなった。(正常に動く) で、またtryブロックを外したら例外が発生する・・・なぜ??? 今までこんなことなかったのに不思議だ・・・ OpenFileNameではそんな現象は見られませんでした。 そんな経験ある方いますか? ちなみにVC++.netです。
catch(...)はアクセス違反等の構造化例外もキャッチしちゃうよ。
192 :
190 :2005/08/07(日) 23:20:02
>>191 キャッチしてくれるんならいいんだけど、
例外自体が発生しなくなってcatch(...)ブロックにも入らなくなったんで
おかしいなぁ〜・・・と。
とりあえず正常に動きはするみたいだけど、原因がわからないと
イマイチ気持ち悪くて・・・
というか、SaveFileName を実行中に例外が発生したのか、 それとも別のところで発生したかは判明してんの? SaveFileName は内部で SetErrorMode 使ってたりするから (外から見て)例外は発生しにくいぞ。
194 :
173 :2005/08/08(月) 00:43:01
>>189 すみません、何語の話でしょう?(^^; BCB6のTAnimateクラスに
OpenExなんてメソッドはないっす。
TAnimateクラスのソースを眺めてみたんですが、まあ最終的には
そんな感じにはなってましたけど。
ACM_OPENとかのメッセージを使うらしいことはわかってきました。
とりあえず当面はサポートされてるアニメーションで間に合わせとくかな。
>>194 Animate_OpenEx は WIN32API 。
TAnimateのクラスからウィンドウハンドルを取得すればそのまま使えると思うけど。
ただし、TAnimate がアニメーションコントロールのラッパーじゃない場合はうまく機能しない。
196 :
173 :2005/08/08(月) 01:29:59
>>195 なっっ!そうでしたか。
Platform SDKのヘルプで調べたら確かにありました。m(_ _)m
情報感謝です。
リストビュー、あるいはリストビューを子に持つウインドウに対して、 拡張スタイルにWS_EX_COMPOSITEDを指定してやると、 WM_PAINTが発生しまくるわ、WM_NOTIFY(リストビューのNM_CASTUMDRAW)が飛んできまくるわで、 リストビューは表示されないし、 WM_PAINTが飛びすぎなので、当然レスポンスは著しく下がるし、CPU使用率が100%になるしと、 まともじゃない挙動になるのですが、 誰か詳しく分かりませんか?
198 :
190 :2005/08/08(月) 05:44:54
>>193 その関数しか呼び出してない部分で発生してるので
間違いないと思います。
う〜ん、もう少し調べてみるか。
失礼しますた。
単にスタックぶっ壊してるんじゃないのか? 例外関係はスタック食うから、それで隠れてるだけって可能性も。
200 :
97 :2005/08/08(月) 23:26:06
とか言ってたらCreateSymbolicLinkのリファレンスキター
>>197 当然OSはWindowsXPで、CS_OWNDCかCS_CLASSDCを指定しているんだろうな?
ディレクトリの作成日時や更新日時を変更する方法を教えてください。
ディレクトリの更新日時は、ちょっとしたことで変わります。 諦めたほうがいいかと。 SetFileTimeしてみた?
204 :
197 :2005/08/09(火) 06:14:13
>>201 MSDNだと、指定してはいけないことになっています。
今試してみたら、ウインドウが表示されなくなりますね。
いろいろ試してみたけど、やはり自前でダブルバッファ処理をしたほうがましですね。
Vistaに期待しようかな。
ありがとー。 これで書庫のディレクトリの日時の復元が出来そうです
C++スレで書き込んだら、APIスレで書き込んでくれと言われたのでやってきました。 どなたか、教えてください 自分で作ったアプリケーションをノンアクティブ状態でジョイパッドを使用できる状態にしたいのですが、どうすれば よろしいでしょうか?ダイレクトインプットを使えば簡単なのですが、どうも難しすぎて私の手には負えません。 それ以外で方法はないでしょうか? もう一つ質問があるのですが、自分で作ったアプリケーション以外で新規に起動したアプリのウィンドウハンドルを 取得したいのですが、どうすればいいのですか? 一度に二つも質問してすみません
208 :
129 :2005/08/09(火) 20:44:17
レスポンス遅れてすいません。 129で次の質問したものです。 >ウインドウに表示されたActiveX(Flash.ocx)のボタンの上にマウスカーソルが来た事を判断させたいのですが、 >取り合えずDefWindowProcでやってみたのですが、ActiveXのボタンかどうかの判断は出来ませんでした。 >何方か、解決方法ご存じありませんでしょうか。 >よろしくお願いします。 >132 >ActiveX側でWM_MOUSEOVER レスありがとうございます。 自分は、CAxWindowを使ってFlash.ocxを呼んでるんですが、 とりあえずこのウインドウに流れてるメッセージを片っ端から表示してみたんですが、 WM_MOUSEOVERを含め、それらしい(あやしそうな)メッセージはどうも来ないようなんです。 もしかして全然間違ってますか? 出来ましたら、もう少し具体的に教え頂けると助かります。 以上です、引き続きよろしくお願いします。
209 :
デフォルトの名無しさん :2005/08/09(火) 20:49:36
LWA_COLORKEY | LWA_ALPHA って、機種依存つおい?
210 :
デフォルトの名無しさん :2005/08/09(火) 20:55:08
211 :
デフォルトの名無しさん :2005/08/09(火) 20:58:10
212 :
デフォルトの名無しさん :2005/08/09(火) 20:59:03
よーするに、GetDeviceCaps で問い合わせるような性質の問題があるかってことなんだけどさ・・・・
あまり使われてない機能はデバイスドライバの実装が手抜きな可能性がある罠 さすがにGDIではあまりないけどDirectXだとゴロゴロ
>>210 返事ありがとうございます。フックを使って具体的にどうすればいいのか
教えて頂ければうれしいです。
>>214 やりたいことと同じことをやっている、
オープンソースのソフトのソースコードを見れ。
>>208 そのFlash.ocxは自分で作ったActiveXコントロール?
いまいち作りが不明なんだけど。
どういう風にやったのか詳細を。
つか、スレ違いっぽいのでMFCスレのがいいかも試練。
質問です。 特定のウィンドウのみををクリップボードにコピーする方法を教えてください
>>217 名前から考えるに自作じゃなくてMacromedia(現Adobe)のFlash Playerのコントロール
だから
>>133 みたいに聞いたんだが
あぁ、そうか。 じゃ、ActiveX側がそのイベント発行して無いと無理だな。
>>218 ウィンドウをクリップボードにコピーすることなど出来ない。
ALT+PrintScreen とボケてみる
PrintWindowとSetClipboardDataでなんとか
224 :
129、208 :2005/08/10(水) 10:21:37
217さん、219さん、220さん レスありがとうございます。 説明不足ですいません、219さんのおっしゃる通りです。 >220 >あぁ、そうか。 >じゃ、ActiveX側がそのイベント発行して無いと無理だな。 importした時に吐き出されるFlash.tlhを見るとイベントでは、次の三つが用意されているんですが、 OnReadyStateChange、OnProgress、FSCommand それぞれ捕まえて挙動を見てみたんですがどれもダメでした。 ん〜、無理なんですかねぇ〜。
>>224 メッセージフックで良いと思う。
SetWindowsHookExとかその類をキーワードにして
SDK見たり検索したりしてみてごらん。
226 :
デフォルトの名無しさん :2005/08/10(水) 15:19:26
馬鹿だな、InsideWindows見ればいいのに・・・
227 :
デフォルトの名無しさん :2005/08/10(水) 16:53:33
質問なのですが、現在ひとつのウィンドウにレバーコントロールつけている状況です。 そこでレバーコントロールの右下にスクロールバーを出して、レバーコントロール以下の 文字列をスクロールさせたいと思っているのですが、どうしてもスクロールバーが レバーコントロールの部分まで重なってしまいます。スクロールバーを初期位置に出す WS_OVERLAPPEDWINDOW | WS_VSCROLLではなく、 スクロールバーの初期位置を任意の座標に出すにはどうすればいいのでしょうか? 開発環境は、VC++、SDKです。よろしくお願いします。
228 :
デフォルトの名無しさん :2005/08/10(水) 16:55:48
MFCだろ、WINAPIはZオーダーしか気にしてないよ、場違い
228は気違い
>>227 子ウィンドウとしてスクロールバーコントロールを配置するか、
レバーを除外した部分を子ウィンドウにして、
そっちのスクロールバーを使うか。
231 :
デフォルトの名無しさん :2005/08/10(水) 19:36:29
>>230 返事ありがとうございます。
子ウィンドウとしてスクロールバーを作る方法でいこうと思います。
これで解決しそうです。でも、ウィンドウサイズを可変するとちらつくのが気になるところ・・。
232 :
デフォルトの名無しさん :2005/08/10(水) 20:12:04
>>231 スクロールバーを、モードレスダイアログボックスに配置しては?
どうでもいいけどクメイの間違いだからレバーと言うのやめれ
>>231 親ウインドウの背景を再描画しないようにすれば解決する…はず。
CriticalSectionで同期をとる場合、 既にロックされているかどうかを 処理を止めずに知るにはどうすれば良いのでしょうか?
>>235 TryEnterCriticalSection
MSDNよめばEnterCriticalSectionからリンク貼られているぞ。
すみません、説明不足でした。 既にロックされているかどうかを、処理を止めずに、かつロックせずに知りたいのです。
>>237 むり。
クリティカルセクションでやりたければ、
TryEnter〜で確かめて、自分がクリティカルセクションつかんだら、
すぐにLeave〜するぐらいなもの。
そうですか…。Try&Leaveだとコストが高いですね。 Mutexの方を検討してみます。ありがとうございました。
似たようなもんですが
ミューテックスだと遅いがな……。
>>233 レバーってrebar controlのことか!
手動リセットイベント使った方がよくね?
>>237 >既にロックされているかどうかを、処理を止めずに、かつロックせずに知りたいのです。
それってあまり役に立たないAPIだと思う。
APIから戻ってきて次のコードを実行するときには
もうロックの状態が変更されてるかも知れないわけだし
こんにちは、 プリプロセッサによる条件文を記述しようとしているのですが、 Windows環境でのビルドだと、指定したインクルード(#include "MyWinApp.h")がされるようにしたいのです。 プリプロセッサに何をしていすればいいのでしょーか? よろしくお願いします。 #ifdef ? #include "MyWinApp.h" #else #include "MyApp.h" #endif
>>245 どのコンパイラか言わないのに答えられるわけがない。
というか普通そういうコンパイラ依存の特殊なのは、コンパイラ付属のヘルプに書いてあるもんだが。
>>245 マルチすなや。移動するなら断ってからに汁。
つーか、どうしてWin32APIの問題だと思ったんだ? 更にスレ違いだがね。
>>246 スレ違いなんだからぬるーしる。
>>235 察するに、CriticalSectionで囲まれた部分が何か重い処理を必要としていて、
もしこの部分を他のスレッドが使用していたら、待つのに時間がかかるから
他のスレッドはその処理を実行するのを一時あきらめよう、っていうことかな?
bool g_bEnter = false;
void f1()
{
EnterCriticalSection(&cs);
bEnter = true;
bEnter = false;
LeaveCriticalSecion(&cs);
}
void f2()
{
EnterCriticalSection(&cs);
bEnter = true;
bEnter = false;
LeaveCriticalSecion(&cs);
}
としときゃ、bEnterを調べることによってロックされているかわかるんじゃない?
まあ多少穴はあるが、用は足りるのでは?
長時間ロックするリソースを複数のスレッドで触るのは良くないです。 スレッド分割の設計を見直したほうがいいと思う。
スレ違いですが、シューティングゲームを作ろうと思っています。 WM_TIMERの時に最小限の範囲(rect)をInvalidateRectして WM_ERASEBKGNDも使ってます。 しかし、それでもちらつきがとれません。 どうすればいいでしょうか?
GUIなどを担当するプライマリスレッドがあって、 プライマリスレッドがワーカースレッドを作って何か処理させる、というモデルなんじゃないの? ワーカースレッドがひとつ動いてる間は、新たなワーカースレッドを作って処理させるためのボタン なりメニューなりをDisableにして禁止したい、というケースじゃないかと想像してるんだが。 これは普通に、あっていいと思うけど。
>>254 スレ違いといいつつ書き込む馬鹿に教える事など無い
まあまあ。
>>254 それはゲーム屋(俺は違うが)はみんな知ってるダブルバッファリング処理をしてないからだね。
ゲームならWind32APIを直接使わずに、DirectX9.0c SDKを使う方がいいと思うよ。
スレ違いというより鼬害。
259 :
254 :2005/08/11(木) 18:53:35
>257 dクス。ついにDirectXか
ついにDirectXか ついにDirectXか ついにDirectXか ついにDirectXか 今更DirectXか、だろ
Win32API を使用して、WindowsNTのIPアドレスを自動変更する プログラムを作成したいのですが、IPアドレスエディットコントロールで どうしてもIPを拾えず、変更も出来ません。 何かうまい方法はないでしょうか?
IPアドレスエディットコントロールは、 ただ、ネットワークの設定画面なんかでよくある IPアドレス入力に特化したエディットコントロールってだけですから
>>255 じゃぁロックの設計が良くない。
本当にロックしないといけないのは、
ワーカースレッドが触っている対象物ではなく、
ワーカースレッドが動いているかどうかを管理している部分だろう。
264 :
261 :2005/08/11(木) 19:40:23
ちょっと聞き方が悪かったです==; 2000やXPではIP取得し変更をかけられたんですが NTで使える命令が知りたかったのですが・・
265 :
263 :2005/08/11(木) 19:41:01
管理している部分で、アトミックな操作が必要な部分だけをロックする。 そうすりゃ、ロック待ちの時間はとても短くなるでしょ。
よくわからないが、ひょっとすると、WindowsのIP変更ダイアログを 自動で出現させて、そこのIPアドレスエディットコントロールを弄る、という 話なのか?
267 :
261 :2005/08/11(木) 20:01:01
NTで下記の命令が使えないみたいです。 NicSet.IpAddress NicSet.IpSubnet NicSet.DefaultIpGateway NicSet.DNSServerSearchOrder NTでは無理なのでしょうか?
.NETか
>>267 よーわからんが、本当にNicSetってWin32APIの一部なの?
MSDNで検索してもそれらの関数ひとつもヒットしないんだが。
WMIだべ。
271 :
デフォルトの名無しさん :2005/08/11(木) 20:45:16
>>237 そういう API があるかどうか以前に、本質的に無理だろ?
「ロックされていない」という返却値を受け取った直後にロックされたらどうするんだよ
>>269 NicSetはインスタンス名だろう
ググったら同じ名前で宣言しとるVBソースとかあったし
そんなとこから引っ張ってきてんじゃないか?
>>267 ち な み に API で は あ り ま せ ん
WMIって便利な仕組みをWIN2Kで実装したんで使って〜 って2000が出てきたときにMS方面から聞いた記憶がある。
まぁ、動かん言うことはNTには無いということだろう
意味不明のコンパイルエラーがでると思ったら richedit.hに #define wReserved wEffects の一文が
OSが勝手に開放してもかまわないようなメモリ領域をアロケートすることってできないですか? どうでもいい高速化のためのキャッシュデータに使ったりして スワップしそうならその領域を勝手に開放して新規の確保には失敗するとか。
>>276 キャッシュ用のメモリは、
確保する最大サイズを指定した独自のヒープから確保するようにすれば?
あるかないか、あるならなんというAPIかという質問なんですが。
ヤバイ。winAPIヤバイ。まじでヤバイよ、マジヤバイ。 winAPIヤバイ。 まず広い。もう広いなんてもんじゃない。超広い。 広いとかっても 「東京ドーム20個ぶんくらい?」 とか、もう、そういうレベルじゃない。 何しろ無限。スゲェ!なんか単位とか無いの。何坪とか何?fとかを超越してる。無限だし超広い。 しかも膨張してるらしい。ヤバイよ、膨張だよ。 だって普通は地球とか膨張しないじゃん。だって自分の部屋の廊下がだんだん伸びてったら困るじゃん。トイレとか超遠いとか困るっしょ。 通学路が伸びて、一年のときは徒歩10分だったのに、三年のときは自転車で二時間とか泣くっしょ。 だから地球とか膨張しない。話のわかるヤツだ。 けど宇宙はヤバイ。そんなの気にしない。膨張しまくり。最も遠くから到達する光とか比較してもよくわかんないくらい遠い。ヤバすぎ。 無限っていたけど、もしかしたら有限かもしんない。でも有限って事にすると 「じゃあ、宇宙の端の外側ってナニよ?」 って事になるし、それは誰もわからない。ヤバイ。誰にも分からないなんて凄すぎる。 あと超寒い。約1ケルビン。摂氏で言うと−272℃。ヤバイ。寒すぎ。バナナで釘打つ暇もなく死ぬ。怖い。 それに超何も無い。超ガラガラ。それに超のんびり。億年とか平気で出てくる。億年て。小学生でも言わねぇよ、最近。 なんつっても宇宙は馬力が凄い。無限とか平気だし。 うちらなんて無限とかたかだか積分計算で出てきただけで上手く扱えないから有限にしたり、fと置いてみたり、演算子使ったりするのに、 宇宙は全然平気。無限を無限のまま扱ってる。凄い。ヤバイ。 とにかく貴様ら、宇宙のヤバさをもっと知るべきだと思います。 そんなヤバイ宇宙に出て行ったハッブルとか超偉い。もっとがんばれ。超がんばれ。
宇宙のままになっている所を直せよ。
こんにちは リッチエディットでSetOptions(ECOOP_OR,ECO_NOHIDESEL);を指定すると、 スクロールバーの表示がおかしくなるのですが、 このような不具合をご存知な人はいますか?
>>278 キャッシュに使ってる最中にOSが勝手に解放したらどうなるのか考えたら
そんなものがあるわけないことくらい分かるだろ
だよな
285 :
282 :2005/08/12(金) 12:55:38
あげますあげます
こめんとああうしろあうしろあう
pMsgBox = GetProcAddress(LoadLibrary("user32.dll"),"MessageBoxA"); このように一度ロードしたDLLを開放せず何度もロードを繰り返して大丈夫でしょうか? 同じDLLでLoadLibraryを繰り返し実行してみたところ何度実行してもインスタンスハンドルが変わらなかったので、 一度メモリにロードされたものは再度ロードしようとしても実際はロードされないのだと思いますが・・・。
C/C++プログラマは、大丈夫と明言されていない場合は危険性があって当たり前と覚悟するクセをつけること。
ロジとかM$のマウスについてるチルトホイールの左右は検出できませんか。 point32解析するしかないのかなぁ
>>288 dクス。
エラー処理は手抜きせず呼んだあとはちゃんと開放するようにします。
291 :
デフォルトの名無しさん :2005/08/12(金) 18:17:43
CreateToolhelp32Snapshotだとsvchostとかのフルパスは取得出来ないのですか? エクスプローラが親プロセスになってるプログラムなら取得出来るのですが…。
>>287 既にロード済みであることがわかっている場合はGetModuleHandle()。
LoadLibrary()とFreeLibrary()は参照カウンタを使っているとAdvanced Windowsに書いてあったような気がする。
294 :
デフォルトの名無しさん :2005/08/12(金) 19:46:34
質問: スクリーンセーバとか、作るとき、IMEを消したいんですが、 そんなAPI関数ありましたっけ? それとも何か他の方法が、、、?
なんでこのスレはフックの話が多いの? ウィルスとかトロイの木馬とか作ってる香具師ばっかりなのか?
296 :
デフォルトの名無しさん :2005/08/12(金) 19:50:51
ソース持ってる組織に入れない人が寂しがるスレなのさ
>>294 無い。別の方法を使う。「VC++ 立川さん」でググれ。
298 :
294 :2005/08/12(金) 20:14:30
>>297 ググッた。 出た。 わかた。
ありがと。 この立川さんって人すごいね?
>>295 使用用途の話はスレ違い。
だが、フックやプロセスメモリアクセスはイヤンな用途しか使い道がないような希ガス。
というよりその関数や機能自体そんな目的で作られてるようにも思える。
301 :
デフォルトの名無しさん :2005/08/12(金) 21:16:11
>というよりその関数や機能自体そんな目的で作られてるようにも思える。 アフォか
302 :
デフォルトの名無しさん :2005/08/12(金) 21:34:13
SetWindowPosでWindowが移動出来ないんです。 SetWindowPos( m_hWnd , rect , SWP_NOSIZE); って感じで実装してるんですが、rect内容が変わってる事、戻り値が0になってること、フラグの組み合わせなど 確認したんですが、どれもダメで。 何がいけないんでしょう?、ん〜わかんない。 よろしくお願いします。
>>301 フック系関数やReadProcessMemory、WriteProcessMemoryの使い道を述べよ
306 :
デフォルトの名無しさん :2005/08/12(金) 22:20:35
デバッガ
> フック系関数 MFCのソースでも見ろ > ReadProcessMemory、WriteProcessMemory MSDNの分類見れば自明
デバッガを作っているわけでも、 CBTを作っているわけでもないのに、 それらのAPIを使うのは、 行儀が悪いよね。
それらのAPIがスパイウェアやウイルスのためにあるのはもはや明確
DeleteFileなんてAPIがあるからウイルスにファイルを消されるんだ。 ReadFileなんてAPIがあるからウイルスに(ry
BitBltなんてAPIがあるから山田にスクリーンショットを(ry
そいや、前スレの終わりごろに、Winnyをクラックしようとしてる香具師がいたな。 アプリケーションのファイルやレジストリのアクセスを監視したければ、 Sysinternalsのツールのようなやり方をすべきで、 フックしたりすべきじゃないんだよな。
>>311 >>312 DeleteFileもReadFileもBitBltもウイルス以外に使い道は広い。
だがWriteProcessMemoryなんてデバッガとウイルスとクラックツールぐらいしか使い道がない。
デバッガ作れるような技術がある奴ならWriteProcessMemory相当のコードは書けると思うが。
それにデバッガ作る奴なんてそれほど多くない。
これはMSが厨房向けに容易にウイルスが作成できる環境を提供してると思われ。
> デバッガ作れるような技術がある奴ならWriteProcessMemory相当のコードは > 書けると思うが。 ReadFileがなくてもファイルを読めるのか? (メモリマップトファイルを使えば 読めるがそういう話じゃなくて) APIってそういうものだろ
> これはMSが厨房向けに容易にウイルスが作成できる環境を提供してると思われ。 それでMSにどういう得があるんだよ デンパ垂れ流すのもたいがいにしろ
>>313 WOW64のファイルシステムリダイレクションやレジストリリダイレクションが
ユーザーモードで実装されていることについてはどうお考えですか
MSマウスの左右のサイドキーが押された時に発生するメッセージは何でしょうか? また、発生するメッセージを調べるにはどうしたらいいのでしょうか?
あれってXBUTTONだと思ったが違ったっけ? 第4・第5とも同じメッセージが割り当てられてるから、PARAM値を見ないと判定できないんじゃなかったっけ。
321 :
291 :2005/08/13(土) 01:22:09
制限ユーザーじゃないんだけどなー。 何故かC:\からのフルパスが取れるのは一部だけ…
んーAdministratorだとフルパスが取れたからそうなのかと思ったけど外してたか
>>317 この話といったいどんな関係が?
それらはフックすることでAPIコール前に調整しているのではなく、
APIコールした後にOSのモジュール内で調整しているんですよ。
>>323 > この話といったいどんな関係が?
「フックしたりすべきじゃない」と考える論拠によるのでお聞かせ願えますか
>>291 どうやってる?
具体的にコードを示したほうがいいぞ。
エスパー能力を発揮すると・・・
PROCESSENTRY32構造体のszExeFileを見てたりする?
EnumProcessModulesして、
GetModuleFileNameExしたらどう?
>>324 それじゃわからない。
もっと詳しく、この話とどう関係するのか説明してよ。
どうしてWOW64だとフックしなきゃいけないの?
317じゃないが。
>>304 OSからしてソース非公開である以上、アプリがソース公開されているはずもなく、
ソースのない状況でもアプリをメンテナンスする必要性(あるいは需要)がある以上、
フックのような仕組みは必要悪として存在せざるをえない。
(バイナリパッチが使えないシチュエーションも存在する)
>>313 カーネルモードドライバでやるべきってのは間違い。
その程度の用途でいちいちカーネルモードにコード突っ込んでるようじゃ、
とてもじゃないが安定したシステムなんか望めない。
皆がSysintarnalsレベルの技術者ではない。
まあ、Server系ではフック類は無効になってるとかしたほうがいいとは、個人的には思うけどな。
あくまで「パソコン」としてのWindowsに必要なだけで、「サーバ」にはいらんだろうし。
>>327 なるほど、フィルタドライバだとカーネルモードになるってことか。
バグがなくても危険きわまりないAPIフックと、
バグがなければ安定するフィルタドライバ、
どっちを選ぶかというと・・・後者でしょ。
なんだかんだ言ってるけど、やってることはクラックなんですよ。
>>328 ダウト。ありえない仮定を持ち出すのは詭弁の第一歩だよ。
APIフックでコケるのはフックかけられる側プロセスだけで、
その程度でシステムダウンするほどNTカーネルはやわじゃない。
(9xは現代的OSじゃないのでしらん)
カーネルモードドライバはコケればほぼ確実にシステムごともっていく。
これはバグがどの程度あるにしたところで、変わらない事実。
> やってることはクラックなんですよ。
だから何。カーネルモードでやろうがどこでやろうが、クラックはクラックだが?
クラックかクラックじゃないかなんて、技術に対する解釈の相違にすぎんよ。
少なくともスレ違いだ。
どうでもいいの
あれ?
332 :
デフォルトの名無しさん :2005/08/13(土) 05:44:59
英語版しかAPIヘルプを持っていないので四苦八苦しましたが、デバッグ機能についておおよそ理解しました。 しかし、わからないことがあります。 1. ブレークポイントを利用してデバッギーを停止させたいわけですが、APIヘルプにはデバッギー側からDebugBreak()をコールする方法しか載っていません。 INT 3やDRxを利用したい場合、システムのサポートは一切ないのでしょうか・・・? だとすると、 INT 3 -> ReadProcessMemory()/WriteProcessMemory()を使う DRx -> SetThreadContext()/GetThreadContext()を使う ということでいいのでしょうか? 2. 一般の(アプリケーションの)デバッガではデバッギーをロードした時にはEIPはPEヘッダのエントリポイントになっています。 しかしCreateProcess()でCREATE_SUSPENDEDを指定した場合や、DEBUG_PROCESSを指定した場合(初期ブレークポイント例外イベントまでContinue)、スレッドコンテキストを取得してもそのような位置にはなっていません。 まあ待ちループ中なので当たり前と言えば当たり前かもしれませんが・・・ デバッガはどうやって「頭出し」を行っているのでしょうか?まさかPEヘッダを解析してエントリポイントにINT 3やDRxを仕掛けているとか・・・? ちなみにWin98です。
333 :
332 :2005/08/13(土) 05:55:09
あっ私は前スレ608です。
>>329 おぃおぃ詭弁だとレッテルはって誤魔化すのはヤメれ。
APIフック
バグがあると危険
バグがなくても危険
フィルタドライバ
バグがあると危険
バグがなければ安全
ちなみにSysinternalsのFilemonはクラックじゃないぞ。
OSが備えている機能を意図した通りに使っているからね。
それに対して、他のプロセスに任意のDLLを割り込ませるのはクラックだろう。
>>334 詭弁に反論する意味がないのは自明だと思うので、無視させてもらう。
>>335 ぷ
フックだってグローバルにやれば、バグがあったら大惨事だ。
そんなに安全だっていうなら、APIをフックするDLLを、
レジストリの
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Windowsの
AppInit_DLLs
に設定してみ。
何かさ、クラックっていう言葉のニュアンスがオレが思ってるのと違う。 技術の内容じゃなくて、悪意のあるのがクラックかとオモテタヨ。 このごろは説明書に載ってない使い方をするとクラックなんですか。 くわばらくわばら。
>>336 バグがなければ安全
→事実に対して仮定を持ち出す
ちなみにSysinternalsのFilemonはクラックじゃないぞ。
フックだってグローバルにやれば、バグがあったら大惨事だ。
→ごくまれな反例をとりあげる
詭弁のガイドラインくらい読もうぜ。
まあそうでなくても、常識的なWindowsプログラマなら、お前さんの事なんか信用しないけどな。
おおっと、こう言ってしまうと
→主観で決め付ける
に該当してしまうな。悪い悪いwww
もう黙るわ。
339 :
デフォルトの名無しさん :2005/08/13(土) 08:25:31
>>337 大抵のソフトの説明書には使用することによって発生した損害は一切負わない
とかって免責があるからどんな使い方しても問題無いんじゃない?w
ただ俺が思うのはフリーソフトなら免責ってのはわかるが
シェアなのにその免責っておかしくね?
それこそクラックしたくなる罠
>>337 いや、悪意あるだろ。
自分の書いたプログラムのプロセス空間に、
勝手にスレッド起こされたり、
勝手にDLL読み込ませられたり、
勝手にAPIをフックされたりしたら、
嫌だろ。
だいたいあれだろ、Winnyの動作を変えたくてクラックしようとしてるんだろ。
ただでさえWinnyやってるだけで人間の屑なのに、それをクラックするなんて・・・。
>>338 > 詭弁のガイドラインくらい読もうぜ。
笑わせてくれるな。
ガイドラインがどういうものか、わかってないだろ。
>>340 みたいな奴に限ってかちゅ〜しゃが手放せないんだよな
344 :
デフォルトの名無しさん :2005/08/13(土) 08:47:16
>>339 基本的には包丁を使用することによって発生した損害をメーカが負う必要は必ずしもないのと一緒だが
それに便乗してメーカ側の怠慢による結果までどさくさまぎれに免責しようって傾向はあるな
クオリティ低ス…
>>340 俺は別に自分の作ったソフトがクラックされてもかまわんけど?
むしろそうやって変な動作をさせられたほうが普段見えないバグを発見してくれてよかったりする。
ある程度想定外のことをされてもまともに動くようにはしてるが。
Winnyは元々挙動に問題があるからそれを修正しようとしてるのであって不正な動作をさせようとしてるわけではないだろ。
ディスクの負荷が高すぎるからWriteFileなんかをフックして特殊なバッファリング機能をつけるとか。
47氏がタイーホされて開発が継続できないからバグや不具合の修正はユーザーの仕事。
それでいいじゃないか。
>ある程度想定外のことをされてもまともに動くようにはしてるが。 それは無駄なコスト。 16連打クリックとか物理メモリ8MBとかそういう「想定外」ならともかく フックなんぞされたときの動作まで保証する必要はないだろ。
>>347 そりゃあ変な関数にすり替えられちゃダメだが。
フックできなくしてあるのではなくてフックされたら困るような設計はしてないということ。
勝手に妙な前提条件付けて否定しにかかる変な奴がいるな
>>348 行儀良いフックに限って言うなら、
そのフックによって挙動がおかしくなる設計というのを想像できないが。
暗号関係のAPIを学んでいるんですが、 一部の関数に、 CP〜とCrypt〜という、プレフィクスの違うものがあるのですが、 これはどちらを使えばいいのでしょうか? なぜかCrypt〜のほうがぐぐるとヒットしやすいのですが。 MSDNだとCPのほうが分かりやすいリンクを貼られていたりもします。 どちらも説明は同じような意味のことが書いてあるのですが……。
勝手にしろよ
353 :
351 :2005/08/13(土) 10:54:03
すみません。 自己解決しました MSDNもっとよく読むべきだったOrz
Winny厨はダウソ板にカエレ! フックなんていうイヤラシイことは人に聞かずに自力でヤレ! 自信過剰なフックは事故のもと。安易にフックするな。 人様のプログラムに悪さする暇があったら、自分でアプリを作れ。
フックが危ないならフィルタドライバ使えばいいじゃない
何が目的かなんてどうでもいいよ。APIの良し悪しについて語るスレじゃないし。技術的な質問に対して答えるだけ。 質問者の目的を邪推してくだらん話をグダグダ続けてないで、もっと有意義なスレにしましょう。↓
Winnyのフックのしかたを教えてください。 なんかIATがないんですけど。
>>357 「Winnyのフックの仕方」はなんとなくスレ違いじゃね?
ついでだからマジレスするとtelockのアンパッカーを探してください。
>>353 えっ…気になって調べてみたけど、違いが分からないっす_| ̄|○
WinnyのAPIフックのしかたを教えてください。 すでに走っているWinnyのAPIを乗っとりたいので、アンパックしたくありません。
まあまあ。でも特定のソフトについての質問なら、なんとなくここで聞くことじゃないと思うけどねぇ。 ダウソ板の人のほうが詳しかったり?
telockでパックされたEXEによる既存のプロセスのAPIをフックする方法を教えてください。
フックの正当性を書いてた奴は、やっぱりny厨か。 ほんとろくでもない人間ばっかりだな。
てか見苦しいから止めようぜ。別にフックするつもりもないんだろ。
プログラマなら手段を隠蔽されることに嫌悪感を示すものだと思っていたが、 「フックなんてない方が良い」などと言う人がいるんだなぁ 手軽な言語が流行るわけだ
コンソールアプリでprintfで出力してるものをGUI画面に出力したいと思ったことならある。 結局リダイレクトのほうがてっとり早いんかな
クラック以外にも十分有用だと思うけどねぇ 有名な2chツールでいくと、kage(かちゅ〜しゃの下駄)とか
>>366 IATがないと言ってるだろがボケ
試しもしないで知ったか書くな!
>>365 フックは正当に認められた権利です。
373 :
デフォルトの名無しさん :2005/08/13(土) 16:19:15
>>321 どうやってやってる?
Process32Firstだけじゃ、多分フルパスは取れないんで。
↑で取れたプロセスIDから取得しないとだめだと思うよ。
お前ら、フックで単独スレ立てろ
Win9xはProcess32FirstのPROCESSENTRY32.szExeFileにフルパス入る。 NT系はファイル名しか入らなかったはず。
「フックはいかん」というならフックされたAPIをフックし返す もしくはフックを無効化する方法を考えろ! ・・・思いつかんorz
私の肛門もフックされそうです
フックというのが出来なかったら ウイルスとか減りますか?
379 :
デフォルトの名無しさん :2005/08/13(土) 18:32:20
>>378 IntelliPointが動かなくなるので首吊ります
実際問題フックさせないようにするにはどうしたらいいですかね? 先にSetHook〜をフックしておいてフックを妨害するって方法しか 出てきません。
ヒント UPXとかtelockとかの暗号化・圧縮・クラック防止等のツールが何をやっているのか調べればわかるよ。 売り物のソフトには、フックしたりするような行儀の悪いプログラムを妨害して フックさせないようにする代物もあるらしい。 とりあえず俺が思いつくのは ・インポートライブラリを使わない ・メモリの要所にライトウォッチを設定して勝手に書き込まれそうになったらプロセス終了しちゃう ・CreateRemoteThreadとかのAPIを先に乗っ取って封じてしまう
386 :
デフォルトの名無しさん :2005/08/13(土) 20:33:45
SDIというのは、MFCじゃないと無理なんでしょか 猫でも、というところでMDIは見たのですが。 ググってもMFCの話しか見当たらないス。
387 :
デフォルトの名無しさん :2005/08/13(土) 20:43:01
>>386 Petzold の最初のサンプルが立派に SDI だけど、
MFC で出来ていたことの何がしたいの?
386の言うSDIは「俺SDI」だろうな。
>>387 Petzold本の事ですかい?
今知りました。残念ながら無いです。
今までMFC無しで作ってたプログラムに
SDIを追加したいと思いまして。
>>388 って感じ?
390 :
デフォルトの名無しさん :2005/08/13(土) 21:10:29
>>389 ただ RegisterClass, CreateWindow して WM_DESTROY で PostQuitMessage つーだけのプログラム
>>390 出来るのですな!やってみます。
レス有難う御座います。
>SDIを追加したいと思いまして。 たぶんSDIを思い切り勘違いしてるな。
もちろん戦略防衛構想の事だよな
394 :
デフォルトの名無しさん :2005/08/13(土) 22:40:55
UAE から国民を守るのか?
Windows標準APIではないですが、nkf32でJISをShift-JISに変換するとき、半角カナと 一部の特殊記号(1byte文字)のみ変換せずにそのままスルーすることはできないでしょうか? (半角カナを全角変換してそのまま出すというAPIはあるのですが) これらの文字をnkf32でShift-JISに変換すると、誤変換されて文字化けしまい、困っています
nkfのソースに手を入れれ。
>>395 話としては、何を勘違いしているのかに興味はなくもないがスレ違い。
nkfで入出力ともエンコーディングをちゃんと指定しているなら普通化けない。
シフト文字無視して変な場所でぶった切って読んでるに一票
コンボボックスでスクロールバーが表示されるようにするにはどうすればいいんですか? WS_CHILD|WS_VISIBLE|CBS_DROPDOWNLIST だと大きさをオーバーした項目はキーボードの↑↓を押してやらなければ見えません CBS_DISABLENOSCROLLなどのスクロールのスタイルがあるということはスクロールバーって出ますよね?
プロセス間共有メモリとして作成したファイルマッピングオブジェクトに作成したプロセス以外からMapViewOfFileでマッピングしようとすると 戻り値がNULL、GetLastErrorが5 Access is denied. ERROR_ACCESS_DENIEDを返してきます。 作成側パラメータ ::CreateFileMapping(INVALID_HANDLE_VALUE, NULL, PAGE_READWRITE, 0, 1024, "Testtest"); ::MapViewOfFile(hMap, FILE_MAP_ALL_ACCESS, 0, 0, 0); 非作成側パラメータ ::OpenFileMapping(PAGE_READWRITE, false, "Testtest"); ::MapViewOfFile(hMap, FILE_MAP_ALL_ACCESS, 0, 0, 0); コード的に問題はないように思うのですが原因がさっぱり分かりません。
作成側がサービスとか? 第二引数はNULLじゃなくてNULL DACLを指定するとか(セキュリティ的に危なそうだけど)
402 :
400 :2005/08/14(日) 12:59:01
作成側、非作成側ともに通常のWin32GUIアプリです。(Win32コンソールでも同様の症状) NULL DACL指定しても相変わらずアクセス拒否られました。 MapViewOfFileでFILE_MAP_READを指定するとマップされるのですがこれでは書き込みできないのでダメぽな状態です。 ちなみにテスト環境はWindows2000SP4、Admi権限ユーザーです。
FILE_MAP_READ | FILE_MAP_WRITEじゃダメなのか? そこらのサンプル見てもそうなってるけど。 日本語版MSDNにはFILE_MAP_WRITEと同じって書いてるけど嘘だから
404 :
400 :2005/08/14(日) 13:20:29
|| || || バッ ∧||∧ (∩ ⌒ヽノ OpenFileMappingのDWORD dwDesiredAccessに \ _⊃ Create〜のDWORD flProtectの値を間違えて入れてたのが原因らしい ∪ Σ ≡| ̄ ̄ ̄ ̄| || || ∧||∧ ( ⌒ ヽ ∪ ノ 鬱出汁脳 てか似たようなAPIの似たような引数で値が違う仕様作ったMS逝ってよし ∪∪
|| ∧||∧ ( ⌒ ヽ ∪ ノ ∩∪∩ (・∀・| | ウヒョー | | ⊂⊂____ノ 彡
406 :
デフォルトの名無しさん :2005/08/14(日) 18:15:13
ウインドウもウインドウクラス名もないプログラムを、二重起動禁止ではないけど、二重起動した場合に1番目起動のプログラムが 終了するまで2番目のプログラムをスリープさせようと思っているのですが、 ウインドウもウインドウクラス名もないプログラムが起動しているか否かを検索するAPIを探しているのですが、見つけられません。 そんなAPIってなんですか?
|| ∧||∧ ( ⌒ ) | | | ブチッ ⌒ ヽ ∪ ノ ∩∪∩ (・∀・| | ウヒョー | | ⊂⊂____ノ
| | | ⌒ ヽ ∪ ノ ∩∪∩ (・∀・| | キタコレwww | | ⊂⊂____ノ || ブス || ||
410 :
406 :2005/08/14(日) 18:25:18
>>408 ありがとう。知らなかったもので・・・・
LSPのサンプルって今のVC2003に入ってないのかな? 後輩にWinsock+LSPの使い方教えたいんだけどいい資料なくてこまってる。
412 :
デフォルトの名無しさん :2005/08/15(月) 02:38:19
GUIDの構造体の4個のメンバーには何か意味付けがあるんでしょうか? 文字列化されたものは5個のパートに分かれてるし、何か不思議です。
>>411 またかよ。
ウィルスやトロイの木馬やスパイウェア作りたい香具師は氏ね。
VC2003のサンプルなんか見てるようじゃダメ。
PSDKかDDK探せ。
LSPは喪舞の大嫌いなフックじゃなくて正当なインターフェースじゃん
と、ウイルシを作りたい香具師が申しております
デバッグ機能の悪用をウイルスだの何だの言ってる連中は、 何の技術力もいらない「トロイの木馬」が目下最大の脅威だってのに気づいてない、 ただの時代遅れ。
フック関係で、 ちょっと調べればわかることを、 このスレで質問するような香具師は、 スクリプト・キディ と同類と見なされても仕方ないだろ。 初心者はそんなものに手を出さずに、 大人しく順序を踏めってもんだ。 本物のハッカーやクラッカーなら、 ちょっと調べればわかることを質問したりはしない。 質問して答えをもらうまでの間に、自力で解決できてしまうから、 いちいち質問なんていう回りくどいことはしないものだ。
> いちいち質問なんていう回りくどいことはしないものだ。 持論語るのは勝手だが、 質問スレでそういう発言をする矛盾にまず気づこうな。
つ 「馬鹿ばっか」
そもそもLSPって何? Lispの親戚?
おまいらひろゆきがハッキングから夜のおかずまでカバーすると宣言しているのに フックやLSPぐらいでガタガタ騒ぐんじゃないよ
相手が紳士ならな、喜んで提供するんだがな。
>>423 それ、昔のスローガンだから。
IPを記録するようになった今となっては、変えるのが面倒くさくて放置しているだけで・・・。
>>425 IP記録と関係ねー
単におまいの妄想じゃないか
427 :
デフォルトの名無しさん :2005/08/15(月) 14:17:10
ハッキングの話を書いたら幇助とかで捕まるっちゅーの。
>>429 もう挽回は無理だから、Download板でスレ立てて戦ってこい、な?応援してやるから。
431 :
デフォルトの名無しさん :2005/08/15(月) 15:21:00
チラシの裏でいいよ
俺は相手が変な目的に使うと想像がついてても質問に答えてるけど。 そう思ったらわかってても答えちゃダメ?
変な目的を匂わせていても ちゃんとした日本語使っててマナーもしっかりしてる人なら、答える。
自動ログアウト作るのに使ったなフック。 スクリーンセーバでええやんと思いながら。
こんにちは リッチエディットでSetOptions(ECOOP_OR,ECO_NOHIDESEL);を指定すると、 スクロールバーの表示がおかしくなるのですが、 このような不具合をご存知な人はいますか?
436 :
デフォルトの名無しさん :2005/08/15(月) 19:56:01
EXE側の(std::vectorの)データをDLL側で参照(&更新)したいんですが、 どうすればいいでしょうか? 上訳:DLL側でEXE側のデータをインポートできませんか? やっぱりメモリマップドファイルを使わないといけないんでしょうか? 御解答お願いします。
ポインタなり参照を渡せば?
>>436 EXE⇔DLL間で直接そーゆーことをするのはダメ。
やりたい操作を一つずつ関数でラップしてください。
コンソールっぽい機能を作ろうと考えて モードレスダイアログボックスに リッチエディットコントロールを貼り付けたもの使っています。 普通のエディットコントロールでは、使えた右クリック が使えないのですが自分で作成するしかないのでしょうか。
440 :
デフォルトの名無しさん :2005/08/15(月) 20:14:07
437/438有難うございます。
>>437 データを解放するときに怒られてしまいます。
>>438 やってみます。
>>440 メモリを管理している人が違うから怒られて当然。
std::vectorの実装がEXEとDLLで寸分違わぬ保証をしてあげない限り、生で渡すのはダメ。
基本的にDLLとEXE間では、C++のオブジェクトはやりとりできません。
>>441 応用的には、拡張DLLとかいうのを使えば可能(MFCなんかで使ってる)。
詳しくは忘れた。
というか、コンパイラのバージョン揃えて、 ランタイムをDLLにすればええんでないの。
C++のオブジェクト概念はC++コンパイラの上だけだったような。 機械語に変換されてしまえばオブジェクトもへちまもない。
445 :
デフォルトの名無しさん :2005/08/15(月) 22:57:25
COM
>445 C++のオブジェクト概念と、COMのオブジェクト概念は同じものなのかな?
構造体と同じで、仮想関数が有ればvtbl付けるだけだろ
450 :
858 :2005/08/15(月) 23:12:39
451 :
441 :2005/08/15(月) 23:21:25
>>444 クラスのメンバ構成が違ったり、packが違ったりしたら、やばいだしょが。
>>450 l5って言われてもどれか判らない罠。
まぁ、ハンドルで判るわけだが。
>>450 VC6でやったら普通にWM_IME_STARTCOMPOSITIONきたけど?
もしかしてIMEをONにしないで文字入力してるとかじゃないよな?
>>450 てかWM_IME_STARTCOMPOSITIONとWM_IME_ENDCOMPOSITIONはIMEのON/OFF時に飛んでくる
名無しさんこんにちは。いつも楽しく拝見しています。 ReadConsoleInput でマウスイベントが拾えません。 入力のモードに ENABLE_MOUSE_INPUT は含めています。 どうしたらいいのでしょうか。 Windows2000 を使っています。
タスクバーの長さを変えたいのですが、 過去ログ見てて出てきた hwndTaskbar = FindWindow("Shell_TrayWnd", NULL); SetWindowPos(hwndTaskbar,NULL,0,0,960,32,SWP_NOZORDER | SWP_NOSENDCHANGING); でやると一瞬だけ変化して、すぐに戻ってしまいます。 ShowWindowは普通に持続するみたいなんでなんとかなるんじゃないかと思ったんですが (;´Д`) どうすれば出来ますかね?
しつこく繰り返せ
まぁ当然の結果なんだろうけど、 実際にしつこく繰り返してみたらタスクバーがのびたり縮んだりを高速で繰り返して面白すぎることに
460 :
858 :2005/08/16(火) 19:20:33
>てかWM_IME_STARTCOMPOSITIONとWM_IME_ENDCOMPOSITIONはIMEのON/OFF時に飛んでくる え、ってことは、日本語入力モードが切り替わったときなんですか? 変換可能な文字(即ち下線付き状態)を入力し始めたら、WMstartがきて、 変換可能な文字の状態を確定(単にリターンキー)したら、WMendがくる んじゃないんですか??
461 :
858 :2005/08/16(火) 19:24:39
>>453 確かにVC++のサイトでは、WMIMESTRATCOMPOSITIONの説明が 多数掲載されていますね。そして、なんてことはない 特に意識することなく、メッセージ(&H10D)(0x010D)が発生していますよね。 でも、僕の場合、だめなんです。 112とか、84とか、133とかは、ちゃんときてますし、 200(マウスの移動)なんてのもしっかり発生しています。 (WndProcないで、Msg.ToString()をConsole.WriteLineして監視しました) でも、肝心の、0x010Dとか、0x010Eとかがきてくれないんです。 (禁断の壷をインストールしたら、ものすごく快適になりました)
>>456 WM_GETMINMAXINFO を何とかしてみるとか?
463 :
858 :2005/08/16(火) 19:37:13
namespace WindowsApplication1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } protected override void WndProc(ref Message m) { Console.WriteLine(String.Format("{0,5:X}",m.Msg)); base.WndProc(ref m); } } } もう一度、新しいWindowsApplicationを作ってみました。 フォームにテキストボックスはりつけただけです。 ソースはこれだけです。 IMEを切り替えても(キーボードの左上の「半角/全角」ボタンを 連打しても)、010Dや、010Eはきません・・・(T_T)
>>463 .NET(つかC#?)はよく分からんけど、それですべてのメッセージが来るわけ?
なんかフィルタリングされてるとかじゃないの?
465 :
デフォルトの名無しさん :2005/08/16(火) 21:42:44
「マウスがどのウインドウ(オブジェクト)の上にいるか」といった情報を取得したいのですが、 とりあえずSetWindowsHookExのWH_MOUSE_LLでマウスのポジションなど取得出来るようになったのですが、 どのウインドウの上にいるか調べる方法で詰まっています。 何方かわかる方よろしくお願いします。
466 :
858 :2005/08/16(火) 21:43:42
>>466 Win32ではメッセージはちゃんと飛んで、ちゃんと受け取れるので、
あとはC#スレにいったほうがいい。
たぶんコーディング方法を間違えてるとかだろ。
>>465 spy++(VC++ツールにあるでしょう)で適当なFlameにカーソル当てたときのメッセージ見たところ
WM_SETCURSORで戻ってくるときに、hWndが何かしらのパラメータとして与えられていた
おそらく、コールバック関数のいわゆるLOWORD(wParam)か、HIWORDに入れられていると思う(uMsgの値により、変わる模様)
自分だったら、フレームが立ち上がったときのハンドルをGetWindowLongあたりで取得しといて、そのハンドル値と一致したら
それは、フォーカスされたhWndハンドルでってことで、なんちゃらかんちゃら・・・
とやってみると思う
469 :
858 :2005/08/16(火) 22:13:52
は、はい。
470 :
858 :2005/08/16(火) 22:27:36
>適当なFlameに 燃えているのか。
IME_*のメッセージは全部エディットボックスのWndProcが食ってるわけね。 当然親たるFormにはまわってこない、と。
473 :
858 :2005/08/17(水) 01:11:21
>>472 public class TextEX : TextBox
{
protected override void WndProc(ref Message m)
{
switch (m.Msg)
{
case 0x010D:
this.Parent.Text = "start";
break;
case 0x010E:
this.Parent.Text = "end";
break;
default:
break;
}
base.WndProc(ref m);
}
一応、できました。
食われてたんですね、それを早くいってくださいょぅ・・・。
これ、派生クラス作らないといけないんですか?どうしても。
それはC#特有の話だからスレ違いだと思われ。
475 :
413 :2005/08/17(水) 02:15:59
PSDKかDDK探してみましたが。うーんこれっていうのはないですねぇ。 別にこれ使われたところで問題ないと思うんだけどなんでそんなに ウイルスと関連づけようとするの?
>>465 GetCursorPos
WindowFromPoint
ChildWindowFromPoint
478 :
デフォルトの名無しさん :2005/08/17(水) 15:25:09
WH_MOUSEのグローバルフックについて質問させてください。 SetWindowsHookExでWH_MOUSEでグローバルフックを掛けているつもりなのですが、 なぜかフックのDLLを呼び出してる側のウインドウの上でしかメッセージが送られてきません。 そのほかのウインドウ、デスクトップ上だとメッセージが送られて来ません。 (ローカルフックみたいな感じ?) コードはこんな感じなんですが、 #pragma comment(linker, "/section:Shared,rws") #pragma data_seg("Shared") HHOOK hMouse = NULL ; #pragma data_seg() LRESULT CALLBACK hookProcMouse( int nCode , WPARAM wParam , LPARAM lParam ) { パラメータの表示処理 } // フックを仕込む hMouse = SetWindowsHookEx( WH_MOUSE , (HOOKPROC)hookProcMouse , DLLのインスタンス , NULL ) ; どうかよろしくお願いします。
479 :
デフォルトの名無しさん :2005/08/17(水) 18:22:05
Word 文書をオートメーション経由で開いて、 その文書の一部分を (書式や画像なども含めて) 一時的に記録し、 別の文書に貼り付けたいと思います。 Word文書の一部分をメモリに保持することは可能でしょうか? 試行錯誤してみたところ、Word文書を開いて、 抜き出したい部分 (Range オブジェクト) に対して Copy メソッドを呼び出してクリップボードにコピーし、 クリップボードの "Embed Source" 形式のデータを メモリに記録しておいて、後で貼り付けたいときに そのデータをクリップボードに設定して、 WordのPasteメソッドを呼び出せば、 なんとかできるのはできました。 しかし、なんかスマートではないなーという感じがするのと、 これが本当に正しいやり方なのだろうか、という疑問がぬぐえません。 よい方法がありましたらご教授ください。 よろしくお願い致します。 ※Win32 API とはあまり関係ないかもしれませんが、 他に聞くところがなかったので、ここで質問させていただきました。
同じ永続化なら、クリップボードよりはCOMのほうがよいかと。
ゲーム作成中です。Windowで動くゲームなのですが、 起動中はスクリーンセーバーを無効にしたいと思っています。 どうやったら、無効にできるんでしょうか。
レジストリにスクリーンセーバー起動の値があるので それを書き換え、ゲームが終了したら元に戻す
タスクバーをサブクラス化してWM_GETMINMAXINFOだとかWM_SIZEだとかを拾ってなんとか出来ないかと思ったのですが、 LRESULT CALLBACK WndProcTaskBar(HWND, UINT, WPARAM, LPARAM);//プロトタイプ宣言 (中略) hTaskbar=FindWindow("Shell_TrayWnd",NULL); m_oldWndProcTaskBar = (WNDPROC)GetWindowLong(hTaskbar GWL_WNDPROC); SetWindowLong(hTaskbar, GWL_WNDPROC, (LONG)WndProcTaskBar); としていて、WndProcTaskBarが一度も呼ばれてないようなんですが、どうすればよろしいでしょうか? ShowWindow(hTaskbar,SW_HIDE);で試すと効くんで、hTaskbarの中身は大丈夫なんじゃないかと思うのですが……
>>483 他のプロセスを乗っ取る場合はそのようにやってもアドレス空間が違うのでうまくいかないのでは?
WndProcTaskBarはDLL内に書いてそれをアタッチさせないとだめかと思う。
漏れもよくわかってないかもしれないけど、とにかく他プロセスへのアクセスは単純でない。
>Windows 95/98/Me: The SetWindowLong function may fail if the window specified by the hWnd parameter does not belong to the same process as the calling thread. >An application can subclass a system class, but should not subclass a window class created by another process.
>>484 システムフックのときみたいなもんですかね?
試してみます
>>485 XPで組んでます。
まぁtclock2chでもやってたんで(アレは時計だけサブクラス化してタスクバー自体はフックしてるみたいですが)、
サブクラス化しちゃっても大丈夫かと思ったんですが。
>>481 WM_SYSCOMMANDメッセージでwParamが
SC_SCREENSAVEの時、0以外を返す。
SC_MONITORPOWERてのもある。
>>482 それは再起動しないと有効にならないだろ
>>478 Sharedの定義をきちんとdefファイルに書いてあるか?
とりあえず「パラメータの表示処理」ってやつをOutputDebugStringで出力して本当に取れてないか確認しれ
490 :
デフォルトの名無しさん :2005/08/17(水) 21:30:44
>>478 その方法じゃデスクトップは取れない
あと、他のウィンドウのメッセージは何を取ろうとしてる?
例えばWM_LBUTTONDOWNはクライアント領域じゃないと送られてこない
非クライアント領域だったら別のメッセージが飛んでくる
あと、リストビューとかもWM_LBUTTONじゃ取れない
491 :
481 :2005/08/17(水) 22:16:07
>>487 それでできそうです。ありがとうございました。
ソフトキーボードを作ろうとしてるんですが、 自分の窓をアクティブにせずに、 他の窓への入力情報を得るにはどうしたらいいんでしょうか。
>>492 キーボードフォーカスを受け取ったら対象のウィンドウに対してSetFocus
>>492 AttachThreadInput() はどう?
ExitProcessで自分以外のプロセスを終了することは出来ないのですか?
WM_CLOSEとか、コンソールアプリならキーイベントでCtrl-Cを投げるとか
>> ◆Pu/ODYSSEY どこか頭の調子でも悪いの?
頭が悪い。 というか、メッセージ渡してやって正しい終了手続きで終了させるのがセオリーでないの。
501 :
デフォルトの名無しさん :2005/08/18(木) 01:08:56
IME系のメッセージで質問なのですが、 日本語変換が終わった瞬間に「WM_IME_ENDCOMPOSITION」が来て そのあと変換された文字が連続して「WM_IME_CHAR」で流れて来るみたいですが、 このWM_IME_CHARが文字数分すべて流れ終わった瞬間を知りたいのですが、 どうしたらよいでしょうか?
502 :
デフォルトの名無しさん :2005/08/18(木) 04:01:18
すいません、もう一つ質問させてください。 IMEで漢字変換確定後に流れてきた「WM_IME_CHAR」のWPARAMの文字コードを wstring型の文字列に積んでいくにはどうしたらいいでしょうか。 型変換の方法がわからないので「wstr+=wparam」のように そのまま積んでみたのですが文字化けして全然ダメでした。
503 :
デフォルトの名無しさん :2005/08/18(木) 07:57:30
>>496 TerminateProcessを普通は使う
ExitProcessを使いたいなら対象のアプリにもぐりこんでやれば使えるが・・・
>>496 プロセスの終わらせ方のバリエーションとしては、
プロセスをジョブに割り当てて、クオータみたいなもので管理して、
終了させることはできたような気がする。
コンソールアプリで「簡易編集モード」をオフにする方法ありますか?
>>505 「簡易編集モード」を含めたコンソールウィンドウ設定プロファイルは、キャプション文字列ごとにレジストリに保存される。
CreateProcessの引数にコンソールウィンドウのキャプション文字列を指定する項目がある。
・・・あとは判るな?
自己解決しました。
解決したなら解決方法うp夜路死苦
同じ疑問持ってる人がこれ見たとき解決方法が書いてないと困るだろ? あと、只でアドバイス貰ってるんだから、せめてその成果くらい提示するのがマナーってもんだろ。
511 :
デフォルトの名無しさん :2005/08/18(木) 17:55:31
winsock2でsocketでエラーが出ますか?
は?
そりゃでるだろうな。 資源は有限だから。
リッチエディットコントロールについて質問があります。 EM_LIMITTEXTでエディットの容量を3文字にして、 普通に入力すると3文字分でEN_MAXTEXTのメッセージを受け取れるんですが SendMessage(hEdit, EM_REPLACESEL, 0, (LPARAM)"ABCDE"); という具合に3文字以上挿入した時エディットの上限を超えた メッセージ(EN_ERRSPACEだと思うんですが)を 受け取りたいのですがうまくいきません。 考え方間違ってるんでしょうか。よろしくお願いします。
うまくいかないとは?
>>515 すみません。
メッセージを受け取って処理したいんですが。
メッセージが受け取れないってことです。
EN_ERRSPACEはバッファの割当てに失敗した時に送られるのであって、LIMITTEXTを越えたら送られるのでは無いはず
519 :
ya-su :2005/08/18(木) 23:36:11
Getdibitsで、DIB_PAL_COLORSを最後の引数として、パレット番号を取得したいのですが、期待した値が返ってきません。 ReDim Pix(x, y) as byte に入れているのですが、 ペイント系ツールのパレットと違う値が入っています。 とりあえず、0から12の値が返っています。 そもそも、Getdibitsでパレット番号を取得できるのかということも、 ぐぐっても確認できません。 DIB_PAL_COLORSを最後の引数として返ってくるものは、 パレット番号なのでしょうか? 格納するReDim Pix(x, y) as byte が悪いのでしょうか?
MSNメッセンジャーのアイコンとか変更するAPIとかあったりします?
あるわけねぇだろ
524 :
514 :2005/08/19(金) 11:00:44
>>517 LIMITTEXTを越えたら送られるメッセージとかあるんでしょうか。
525 :
デフォルトの名無しさん :2005/08/19(金) 14:08:09
クリップボードにファイルのデータを転送し、エクスプローラなどで貼り付けを行えるようにしたいのですが、 その場合、SetClipboardData関数の第一引数にどれを使えばいいのかわかりません。 CF_TEXTなどは単に文字列を転送する場合のみに使用するから、ファイルのデータを転送したい場合は使わないんですよね? 第一引数を何にすればいいのか。ファイルのデータをどういうフォーマットで転送すればいいのか、 教えてください。
詳しくは知らないけど、 クリップボードへのファイルのコピーって、 たんにショートカットをコピーしているだけじゃないのかな。
エクスプローラでディレクトリにファイル送るんでしょ? 中身じゃなくてファイル名渡すべきじゃない。 それ以外のことがしたいの?
528 :
デフォルトの名無しさん :2005/08/19(金) 14:49:44
>>527 SetClipboardData(CF_TEXT, ファイル名の文字列を格納したメモリオブジェクト);
↑で出来るってことですか?
CF_HDROPじゃないかな
クリップボードなんて数年さわってないのであてずっぽうだけど
531 :
478 :2005/08/19(金) 15:37:06
>489
レスありがとうございます。
>
>>478 >その方法じゃデスクトップは取れない
>あと、他のウィンドウのメッセージは何を取ろうとしてる?
>例えばWM_LBUTTONDOWNはクライアント領域じゃないと送られてこない
>非クライアント領域だったら別のメッセージが飛んでくる
>あと、リストビューとかもWM_LBUTTONじゃ取れない
具体的にやろうとしてることは、アプリのウインドウからマウスが外れた事を察知させようとしてます。
そこで、とりあずグローバルフックを掛けて流れてくるメッセージで使えそうなものを探そうと思ってました。
また何か情報ありましたよろしくお願いします。
532 :
デフォルトの名無しさん :2005/08/19(金) 15:46:32
ActiveXでやりとりされる情報を解析したいんですが、ツールはありませんでしょうか? やろうとしてる事はActiveXのメソッドに送られるパラメータや、プロパティーへ読み書きされる値などを見たいと思ってます。 よろしくお願いします。
誰も答えてくれなかったのでもっかい質問 コンボボックスでスクロールバーが表示されるようにするにはどうすればいいんですか? WS_CHILD|WS_VISIBLE|CBS_DROPDOWNLIST だと大きさをオーバーした項目はキーボードの↑↓を押してやらなければ見えません CBS_DISABLENOSCROLLなどのスクロールのスタイルがあるということはスクロールバーって出ますよね?
オマエいったいどうやってコンボボックス作ってんだ?
>>531 WM_MOUSEMOVEでTrackMounseEvent使って
WM_MOUSELEAVE処理すればいいんじゃね?
>>519 MSDN読め。
> DIB_PAL_COLORS
> カラーテーブルは、現在の論理パレットへの 16 ビットのインデックスの配列です。
>>532 同じインタフェイスとGUIDを持ったActiveX作ってハックする。
>>532 使ったことないから当てずっぽうだけどOLESPY
CardWirthというフリーのゲームがあるのですが、 DirectXは使っておらずエディターを使えば 綺麗なアニメーションのようなものも作れます。 より綺麗にちらつきのないアニメーションを作るには ダブルバッファリングとかいう事が必要らしいのですが DirectXを使わないと難しいのでしょうか?
> CardWirth ダブルバッファリングに該当するページが見つかりませんでした。 スレ違いじゃね? ダブルバッファリングってのは一つ一つウィンドウに描画せずに 一度裏で全部描いてからそれを一気にウィンドウに描画するって技術だから DirectXとは直接関係ない
>一度裏で全部描いてからそれを一気にウィンドウに描画するって技術だから ここは大当たりだけど >ダブルバッファリングってのは一つ一つウィンドウに描画せずに ここは大外れ 正しくは、 最初から前面の画面に直接描画せずに、 一旦別の場所で全ての描画処理(合成など)をしてから、 最終的な結果の画像のみを前画面に描画する技法
いや、そう言う意図で言ったんだが……ウィンドウって表現はまずかったか。言葉って難しいね。
544 :
デフォルトの名無しさん :2005/08/20(土) 20:00:49
Win32 では致命的な言い間違え
言葉が難しいのではない。言葉の使い方が拙いだけだ。
いや、解釈の仕方が拙いだけだ
( ^ω^)
何が違うのかよくわからん
>>540 (・ε・)HSPでも触ってくればぁ?
プラグイン開発用のドキュメント見とけばグラフィック周りの実装が分かりやすい仕様になってるから理解するにはいいかと。
HSPを馬鹿にしやがって?
552 :
デフォルトの名無しさん :2005/08/21(日) 01:09:08
553 :
デフォルトの名無しさん :2005/08/21(日) 06:20:05
特定のプログラムのみについてキーボードフックをするプログラムを作っているのですが、 そのために、特定のプログラムが生成されたことを監視したいのですが、 新たなウインドウが生成された場合にシステムからウインドウメッセージを受けとるようなことって出来るのでしょうか? できるのであれば、ヒントになるキーワードを教えてください。 それとも、10秒おきぐらいに、自らFindWindowで特定のウインドウが起動されていないかチェックする必要があるのでしょうか?
いや、君が今やろうとしているキーボードフックで使うのと 同じAPIで出来るんだけど… フックタイプを隅から隅まで読んで見ると良い。
555 :
553 :2005/08/21(日) 06:39:14
>>554 そっか。他のウインドウ生成もフックで監視できるんですね。ありがとうございました。
556 :
デフォルトの名無しさん :2005/08/21(日) 09:27:49
ListCtrlをウィンドウサイズに合うようにMoveWindowをしているのですが、 右下のつまみでサイズ変更をする時に、ListCtrlの描画がちらつきます。 BackGroundをいったん消してから描画しているからなのでしょうが、 そのBackGroundの消去作業をしないようにするにはどうすればいいのでしょうか? 通常のRegisterClassExでウィンドウ登録をする場合だとWM_BKERASEを呼び出して、背景の消去をしないようにできますが、 一般的にコントロールはウィンドウプロシージャを持たないので、それを使えません。
サブクラス化
558 :
556 :2005/08/21(日) 11:03:45
どうやってサブクラス化するのですか?と来ると予想
560 :
556 :2005/08/21(日) 11:56:20
もう来まへん来まへん オナドロとそのサブクラを実装したかっただけです 午後から待ち合わせがあるのでグッバイ またよろしくね。
561 :
556 :2005/08/21(日) 12:00:44
りすドピュ〜してきます
563 :
ya-su :2005/08/21(日) 16:49:42
その一文を読みましたが、「インデックスの」という表現が分かりません。
パレット番号のことではないとうことなのか、なんなのかが分かりません。
誰か分かりやすく説明してくれませんか?
>>519 MSDN読め。
> DIB_PAL_COLORS
> カラーテーブルは、現在の論理パレットへの 16 ビットのインデックスの配列です。
>>563 まず「パレット番号」という言葉の意味を理解したほうがいい。
565 :
デフォルトの名無しさん :2005/08/21(日) 20:33:53
つうか、仕事なら金払え
566 :
デフォルトの名無しさん :2005/08/21(日) 23:57:21
こんばんは、よろしくお願いします。 メニューのボタンのENABLEDプロパティーを FALSEに、変更したいのですが、 どうすればいいのでしょうか。
EnableMenuItem ちったぁ自分で調べてみやがれ
MSDNめんどいもんな。 あんな糞資料で良質なプログラマーが育成されると思ってるのかぁ?
プロパティならAPI関係ないじゃん
570 :
デフォルトの名無しさん :2005/08/22(月) 01:58:11
Win9xとNT系の両方でBIOSの情報(シリアル、バージョン等)を取得するにはどうすればよかとですか? ヒント下さい
確かにMSDNの資料はひどい。 わからせよう、という気がない。 まあ、だから本が売れるわけだが。
572 :
デフォルトの名無しさん :2005/08/22(月) 03:54:08
VC++とAPIだけでゲームを作ろうと思っています。 windowsゲームプログラミングを読み終わったのですが、 まだゲームを作るための知識は不十分に感じます。 そこで何か本を買おうと思っているんですが、何がオススメでしょうか? 今の所、プログラミングWindowsあたりにしようと思っています。 この本についての意見もお願いします。
列の幅を変更するListView_SetColumnWidthがありますが、 行の高さを変更するListView_???はありますか?
576 :
デフォルトの名無しさん :2005/08/22(月) 12:10:19
spyが使いたくて、
>>4 のマイクロソフトのところから
Platform SDKをインストールしたんですが、spyがありませんでした。
Platform SDKにはspyはないのでしょうか?
当方、VB6の評価版でプログラムつくっているのでMSDNもありません。
c++かVisual Studio買わないとだめでしょうか?
>>576 PSDKにはspyあったと思うけどなぁ。
サンプルソースをもう一度探してみ。
ありません
しまった。>578は>575宛てでw
580 :
デフォルトの名無しさん :2005/08/22(月) 13:11:41
任意のウィンドウに自分がクリックされたと思わせる方法ありますか? SetForegroundWindow(hWnd); SetFocus(hWnd); SetCursorPos(mousex,mousey); mousepos=mousex|(mousey<<16); SendMessage(hWnd,WM_LBUTTONDOWN,mousepos); SendMessage(hWnd,WM_LBUTTONUP,mousepos); としてもクリックされたと認識してくれないので お願いします
>>580 私はこんなことやってた。
::PostMessage(m_hBtns[btnNo], WM_LBUTTONDOWN, MK_LBUTTON, MAKELONG(0, 0));
Sleep(1);
::PostMessage(m_hBtns[btnNo], WM_LBUTTONUP, 0, MAKELONG(0, 0));
>>576 binディレクトリ内あたりにあるはずだけどなぁ‥‥まあ使いやすい物じゃないけどな。
って今入ってるPSDK見たら見あたらないorz
うちはWinspectorってフリーソフト使ってるけど
583 :
575 :2005/08/22(月) 13:34:50
e?e??? ListViewって、行の高さを変えられないんですか? ・・・。 使えない。
というかListViewの使い所じゃないってだけだろ
586 :
580 :2005/08/22(月) 13:46:41
>>581 あー認識してくれないです…
こういうのも試してみたんですけど
SendMessage(hWnd,WM_NCLBUTTONDOWN,(WPARAM)HTCLIENT,(LPARAM)(x|(y<<16)));
Sleep(1);
SendMessage(hWnd,WM_NCLBUTTONUP,(WPARAM)HTCLIENT,(LPARAM)(x|(y<<16)));
対象ウィンドウがdelphiだとだめとかあるんでしょうか
>>586 実際にマウスをクリックしたときに、どんなメッセージが流れるか見てみたら?
>581もそれであたりをつけたし。
588 :
デフォルトの名無しさん :2005/08/22(月) 14:03:40
タスクバーのツールチップを強制的にバルーンにしてみようと思って Shell_TrayWndを親にもつtooltips_class32を探し出して、 そのウインドウスタイルにTTS_BALLOONをSetWindowLongAしました。 (WS_BORDERも消しました。) バルーンにはなるんですがなぜか場所がかなり上によってしまいます。 これを修正する方法を御存知の方いらっしゃいませんか? 対象OSはXPでVisualStyleが適用されています。
589 :
572 :2005/08/22(月) 15:03:29
>>573 >>574 ゲーム製作のためだけに読むには適していないのか
などのAPI関連の書籍についての意見を伺いたかったのですが、
目的がゲームなだけでスレ違いでしょうか?
APIに関してはゲ製作板よりはこちらの方が詳しいと思ったのですが。
本について質問するのはどうだろう。 それこそ、Advanced Windows嫁、という決まり文句になってしまうけど。
>>580 使ったこと無いけどSendInputはどうだろうか?
>>589 「VC++とAPIでゲームを作りたい」
こんな曖昧な情報でどう判断しろと。
まあ、マインスイーパーとかならどうにでもなるが‥‥
593 :
580 :2005/08/22(月) 15:22:53
>>591 おー、こんなAPIがあったんですね!!!!!
あれ、、、MSDNにINPUT構造体の説明がない…
>>580 あるいはmouse_eventを使うとか。
>>595 mouse_eventがmousou_eventに見えなくもない。
>>597 つーかSendInputの引数の説明のところにINPUTへのリンク張ってあるじゃん。
しかしなんでmouse_eventとkeybd_eventはAPIの命名規則から外れてるんだろうな。
601 :
597 :2005/08/22(月) 15:36:14
>>599 ( ノ∀`)アチャー
PlatformSDKとかだとParametersの説明にもリンク張られてるからWeb版の下の関連項目に気付かなかったわ
ついでにURLがSendInputだし‥‥
||
|| バッ
∧||∧
(∩ ⌒ヽノ
\ _⊃ アラヨット
∪ Σ
≡| ̄ ̄ ̄ ̄|
602 :
580 :2005/08/22(月) 15:43:36
>>594-601 みなさんありがとうございました できました!!
mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,NULL);
mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,NULL);
SendInputのほう試してみました
同じ悩みを抱えてたひとどうぞ
static const DWORD click[] = {
INPUT_MOUSE, 0, 0, 0, MOUSEEVENTF_LEFTDOWN, 0, 0,
INPUT_MOUSE, 0, 0, 0, MOUSEEVENTF_LEFTUP, 0, 0,
};
SendInput(2,click,sizeof(INPUT));
解決手段の見当がつかず困っています。。 USBのキャプチャユニットとそれに接続するCCDカメラがあります。 USBキャプチャにはドライバとキャプチャソフトが付属しており、 それを使うとGUIから任意のタイミングで画像を取り込むことがで きます。 今回はCCDカメラに映った映像をコマンドラインから操作して画像 を取り込む必要があります。 ※イメージとしてはCygwinなどでコマンドを打てばそのタイミングで 画像をフォルダに保存するといったようなことをしたい。 要はGUIソフトの機能をCUIで実現したいのですが、どのような方法 で取り組めばよいのでしょうか。 環境はWin2000で実現するのに使う言語はなんでもいいです。
最近WIN32APIを学び始めました。 マウス操作をmouse_event関数で扱いたいのですが、 任意の場所のマウス座標を取得して、他の場所にマウスを移動させても キーを押せば元に戻ってくるような、プログラムはどうすればできるんでしょうか? 座標取得にGetCursorPosを使うんでしょうか?座標の値が違うんですが・・・
>>603 DirectShowとかでやるんじゃないかなあ
>>604 任意の場所のマウス座標を取得して、他の場所にマウスを移動させても
キーを押せば元に戻ってくるようにプログラムする。
>座標の値が違うんですが・・・
どう違うんだ?
>>606 すみません。
SetCursorPosを使ったら解決しました。
mouse_eventが使いたかったのは左右クリックの機能があったからですが、
dx と dy の各パラメータが 0〜65,535と書いてあったし、 DWORDとintでは型が合わん・・・と思ったら
機能を分けて使えばよかったんですね。
失礼しました。
608 :
603 :2005/08/22(月) 17:26:33
>>605 確かにキャプチャソフトはDirectXを入れないと動きませんでした。
とりあえずWin32APIプログラミングで実現するというアプローチ自体は
合っているのですね。
>>606 違うだろ
GetCursorPosで手に入るのは、0 ≦ x ≦ 現在の画面サイズ の値だけど
mouse_eventで使うのは 0 ≦ x ≦ 65535 だ
画面サイズの設定が800*600だとすれば、GetCursorPosでは左上(0,0)、右下(799,599)だが
mouse_eventは常に左上(0,0)、右下(65535,65535)だ
画面が長方形なのに対して、mouse_eventのは正方形なんだよ
>>607 画面の解像度が1024*768なので
xx = 65535 / 1024;
yy = 65535 / 768;
として、GetCursorPos座標を掛けたら(x * zz, y * yy)
mouse_eventで無理やりですができました。
自分のパソコンでしか使わないプログラムなので
今は何とか困りませんが・・・・
611 :
デフォルトの名無しさん :2005/08/22(月) 18:28:25
MCIを使用しようと思いwinmm.libにリンクをして、ビルドしたこところ 以下のエラーが出てしまいビルドできませんでした。 error C3861: 'mciSendString': 識別子は、引数依存の照合を使用しても見つかりません。 原因がまったく分かりません。 偉い人教えてください。お願いしますm(_ _)m OS:WindowsXP エディタ:VC++.NET
612 :
611 :2005/08/22(月) 18:52:26
すいません、自己解決できました。
>>610 GetSystemMetrics(SM_CXSCREEN)とかつかえばいいんでない?
>>609 純粋な疑問だがマルチディスプレイだとどうなるのかな。
615 :
デフォルトの名無しさん :2005/08/22(月) 22:19:02
>>566 >>567 さんありがとうございます。
結構探し回ったつもりなんですが、すみませんでした。
616 :
デフォルトの名無しさん :2005/08/22(月) 23:37:16
case WM_CREATE: mop.dwCallback = (DWORD)hWnd; mop.lpstrDeviceType = NULL; mop.lpstrElementName = "bgm0006.mp3"; iErr = mciSendCommand( NULL, MCI_OPEN, MCI_OPEN_ELEMENT, (DWORD)&mop ); if (iErr) { mciGetErrorString(iErr, strErr, 1024); MessageBox(hWnd, strErr, NULL, MB_OK); return -1; } mciSendCommand(mop.wDeviceID,MCI_PLAY, MCI_NOTIFY, (DWORD)&mpp); break; case MM_MCINOTIFY: MessageBox(NULL,"ポスト",NULL,MB_OK); mciSendCommand(mop.wDeviceID, MCI_PLAY, MCI_NOTIFY, (DWORD)&mpp); break; case WM_DESTROY: mciSendCommand(mop.wDeviceID, MCI_CLOSE, NULL, NULL); PostQuitMessage(0); break; 上記のソースでmp3のループ再生をしようとしたのですが。 MM_MCINOTIFYメッセージがmciSendCommand(mop.wDeviceID, MCI_PLAY, MCI_NOTIFY, (DWORD)&mpp);でポストされません。 どなたか教えしえてください。お願いします。
617 :
はる :2005/08/22(月) 23:57:50
アプリを起動していて、Windows を終了させた場合、アプリに届くメッセージは何かあるのでしょうか?
619 :
はる :2005/08/23(火) 00:19:50
何か教えてください。お願いします。
620 :
デフォルトの名無しさん :2005/08/23(火) 00:26:41
>>619 おっぱい! おっぱい!
おっぱい おっぱい! おっぱい!
おっぱい! ∩ ∩ ノ) おっぱい!
おっぱい! 川 ∩ 川彡'三つ おっぱい!
おっぱい! ⊂ミ∩∧η∧∩彡⊃ おっぱい!
おっぱい!⊂三ミ (,,・Д・)彡三彡三⊃ おっぱい!
おっぱい! ⊂彡川⊂彡川ミ⊃ おっぱい!
おっぱい!⊂彡川∪⊃ U川彡⊃ おっぱい!
おっぱい! (ノ ∪ 川 ∪ミ) おっぱい!
おっぱい! ∪ おっぱい!
おっぱい! おっぱい! おっぱい!
おっぱい! おっぱい!
622 :
はる :2005/08/23(火) 00:37:10
検索結果が多すぎて分かりません。 私でも分かるようなメッセージを教えてください。
>>621 >Windowsが終了するときのメッセージを取得
そのまんまのがある雀
>>622 オマエでも分かるようなメッセージを自分で探し出せ
625 :
デフォルトの名無しさん :2005/08/23(火) 07:32:03
なんと言えばいいかよくわかりませんが、独自の仮想ドライブを追加したいです。 たとえば zipファイルを Xドライブにマウントして、あたかも普通のドライブであるかのように振舞いたい、ということです。 zipファイルをマウントするというのはあくまで例ですが、ようするに仮想ドライブへのアクセスを自分でハンドリングしたいという ことになるのでしょうか。 ドライブが無理なら、ディレクトリに見えるのでもいいです。 これを実現するために必要なAPIや、あるいは調査をするためのキーワードなどを教えてください。 これができたらやりたいことはいっぱいあるのですが、たとえばCD(ROM)に書き込みができるように振舞う、なんてのがやりたいです。 書き込み可能に見えるドライブX を作り、最初ドライブX は CDと同内容一が見え、このドライブに対して書き込みが発生すると その差分をHDDの適当なディレクトリに作って行き、次にドライブX を読むときには差分の方を優先して見せる、といった感じです。
ドライバ書け
628 :
625 :2005/08/23(火) 08:36:18
>>627 ありがとう!
とりあえずそれが参考にしたという filedisk を落としてきた。
ソースが短くて読むのにはいいのですが、make の仕方がわかんないので困ったものです。
でも、ソース中に含まれるキーワードをぐぐると、結構それっぽいものがヒットするので、いつの日か何か作れることでしょう。
また、
>>627 のリンクを少し見ただけでも、ディスクドライバとファイルシステムドライバがあるってことがわかりました。
自分のやりたいことは、きっとファイルシステムドライバも関連してくるんだろうと思います。
マルチスレッドで、共通変数への同時アクセスを防ごうとしてますが、 クリティカルセッションではさむ(サンドイッチみたいな)かたちでよろしいのでしょうか? よろよろ。
>>629 どうした、具合でも悪いのか?睡眠と食事はちゃんと取れよ。
633 :
629 :2005/08/23(火) 17:33:50
おぉ、悩める同士。 返事してくれてサンクス。 またよろしくなぁ。 おらはらへったぞ。
悟空かよ
らへったぞ、って何?
ああ「腹減ったぞ」か。
Interlocked〜() もたまには使ってあげてくださいね♪
winsockってwin32APIに含まれますか?
含まれるんじゃね?
ふと疑問に思ったんだが、zipファイルをディレクトリにマウントするシェルエクステンションって、 インターフェースは公開されてなかったか? ぐぐってもそれらしいのが見つからないんだが・・・
cabviewのソースならある
GetOpenFileName()を用いて複数ファイル名を取得したいのですが OPENFILENAME の lpstrFileに複数ファイル情報を受け取るために 必要なバッファサイズを事前に知るにはどうしたらいいのでしょうか?
>>642 まずはユーザーがいくつのファイルを選択するか
事前に知る方法を考えよう。
644 :
デフォルトの名無しさん :2005/08/24(水) 01:22:47
ゲーム製作のために今APIを勉強しているのですが 大学で情報系を専攻しているのでAPIを本格的に勉強すべきか迷っています。 そこで質問なんですが、APIを勉強する利点ってどんな事があるんでしょか? ググッてみてもAPIの勉強サイトは出てくるのですが、 APIを利用してできる事などの情報がなかなか見つかりません。 APIを利用してできる事を具体的に教えてください。 本当に初心者の質問で申し訳ありません。
なんかすごい本末転倒な感じがするな
感じじゃなくて、そのものズバリだべし
窓用のプログラムを作りたい場合、 選択幅は Win32API だけじゃない事を伝えておこう。
>>644 興味があるのに自分で試しもせずにぐーぐるやら人の意見をあてにしてるようじゃ
勉強する必要ないんじゃないかな。
仮に勉強を始めたとしても本格的にやってるつもりになるだけで終わると予想。
>>644 俺も情報系の大学行ってるが、1回生って事もあって内容が物足りないので
純粋に新しい事を覚えたいって理由でCやらWin32APIやらをやってる。
やりたきゃやる、やりたくないならやらない。それで十分だろ>APIをすべきかどうか
覚えることの利点なんてやってりゃ分かると思ってるが
習うより慣れろ。
>>648 何のために勉強するかっていう目的も持たずに
気分次第で手探りにやる程、向上心は低くありません。
自由な時間は限られているので自分のためになる事を
やろうと思って質問したつもりだったんですが、すいません。
もう興味本位に時間を潰せるほど責任感のない年齢じゃないんで。
ていうか、 >ゲーム製作のために今APIを勉強しているのですが とか言ってる割にWin32APIが何を指すのかすら理解して無くない?
ゲーム作りならHSPが楽とかたまに聞くからそっちにしたら? 俺はやったことどころか興味すらないからどんな言語かも知らないけど
俺的には >大学で情報系を専攻しているのでAPIを本格的に勉強すべきか迷っています。 が意味不明。大学で教えてくれるのならあえて勉強する必要など ないと思っているのか?だとしたら向上心低いな。 つーか興味本位に時間潰せないとか言うほど心的余裕のない奴には無理だと思う。 素直にやめとけ。それでもやりたいというのならまずはちゃんとした文章書いて来い。
きっと
>>644 の中ではAPIとは
Action game Programing Interface
の略なんだな。
>>644 ゲーム製作ならDirectXSDKの勉強の方が直接的だろうね。
ゲーム以外のWindowsアプリを(.NETFrameWord使わず)作る必要があるなら
まあ、Win32APIの勉強はまず必要になってくるが、その必要に応じてその都度おぼえていけばいいんじゃないか?
本当はまだ大学初年度でまだAPIどころか基本的な言語の勉強すらきちんとしてないのに、
APIについて少しだけ勉強してそれにどんな利点があるのか調べようと努力したんだけどわからなかったと
適当にアピールしとけば誰か答えてくれると思ったんじゃない?
んで、返答が
>>645-651 だったからちょっと大人ぶった発言をしてみた若者だと予想w
APIなしで組みます int main(){ return 0; }
>>640 それ知りたい!
だれか知ってる人いない?
巨大ファイルの部分的な削除挿入を クラスタがチェーンしてることを利用して高速化する方法ってありますか?
662 :
デフォルトの名無しさん :2005/08/24(水) 06:13:25
セクタ単位のアクセスはあるから可能だろうけど、 削除挿入したい情報が物理境界と一致することにどんな期待が持てるんだ? 俺だったらオンディスクでリスト構造やポインタ配列を作るだろうな、そういうことを考えているときは
664 :
デフォルトの名無しさん :2005/08/24(水) 12:02:32
大学でAPIなぞわざわざ教えるわけないだろ。 英語の授業でいちいち単語の意味を教えないのと同じだ。 リファレンスで引っ張ってくるだけの単純作業を大げさに「勉強」と呼ぶ時点で終わってる。
667 :
664 :2005/08/24(水) 12:10:09
と書いたけどこれはブラウザで開くことになるから664が望んでいるのとは違うか?
URLDownloadToCacheFileかURLDownloadToFileかな?
672 :
664 :2005/08/24(水) 12:36:05
>>IEコンポーネントはどーよ >とりあえず「wininet.dll」ってのを今調べてみてます。 話がかみ合ってないのに正しい答えを見つけてるのは何故だろう
ESPだな
>>651 率直に言って、興味本位で動けないような奴はろくな技術者にはなれない。
業務系PGならそれでもなんとかなるが(周囲に大迷惑かけるけどな)、
ゲーム関係ならなおさら「興味本位」は重要だぞ。
>>673 才能って奴じゃないか。
少なくとも
>>644 にはなさそうなものを持ってそうだ。
おまえらもAPI勉強しとけよ。APIを
MFCよりかは、APIのほうが10000倍いいぞ。 ほんとに。
Win系全てに最初から標準で入っててくれりゃあ別にMFC使うんでもいいんだけどな .NETは今んとこ論外、重すぎ
>>679 Win32APIはVisualComponentLibraryの何倍いいですか?
>>681 VCLはよく知らないが、使いやすくなったMFCみたいなもんだろ?
それならVCLでできることは全てWin32APIで出来るし、VCLじゃ出来ないこともできる
その代わりややこしい
そこでATL/WTLですよ。
雑談はま板でドゾー
Windowsでできることは全てAPI使ってできる
ATLはWin32APIのラッパとは言っても そもそもCOMコンポの開発労力を削減するために設計されたもんだから、 Win32APIを網羅してるわけじゃないでしょ。 まあ、俺は結構好きなんだが。
>>687 おっ。俺はそのスレの339。
盛り上がってくれるとうれしい。
なんだその自己主張
>>686 ATLとWTLで、GUI周りのAPIはほとんど面倒見てくれるが。
正直、あとはAPI直に使ってもいいし、自分でラッパ書いてもいいんじゃないかと。
GUIだけは面倒だから自前で書きたくない。
高級言語でできることはすべてアセンブラでできるみたいな。 いくら理論上は可能でもアセンブラでオブジェクト指向のプログラムとか 組みたくない
そういう高度な議論は他所でやれや
アセンブラからAPI呼び出しか、おめでてーな
↑ここ数レスで一番の大馬鹿
俺はGUIもAPIで書いてる。 というより手元にVCLやMFCがないだけだが。 それ以外に直接API使わずにGUI書く方法があったとしても難しそうだし。
696 :
デフォルトの名無しさん :2005/08/25(木) 17:40:38
そんなおまいらにはWTLを。 と言いたいがそんなおまいらにはATLがないんだろうな。
はいはい
700 :
デフォルトの名無しさん :2005/08/25(木) 22:29:56
それのどこがWinAPIと関係するのか説明できたら教えてやるよ。
ANSI_CHARSETm9(^Д^)プギャー
703 :
700 :2005/08/25(木) 23:14:03
>>702 ここでしたか!ありがとうございます、無事動作しました
WinAPIと関係あって良かったですw
今日のMVPは701か
706 :
705 :2005/08/26(金) 11:13:24
かいけつ
>>706 きくまえにえむえすでぃーえぬ(えいごばん)よめ
WinMainとプロシージャのWM_CREATEってどっちが先に実行されますか?
WinMainが走らないとプロシージャも登録できんだろうが
>>708 WM_CREATEはCreateWindow(Ex)の中の人が呼ぶ。
>709-710 レスありがとうございます
チャットバーみたいな文字列入力できる物ってどうやって作るんですか?
CreateWindow
教えてください。 PathAddBackslashA などの ANSI 版 Path API は、 マルチバイト文字(CP932)を含むパスを 何の問題も無く利用することが出来ますでしょうか?
全く問題なし。 Windowsはひらがなや漢字をフォルダ名に使えるし。
ファイル名もだが
MultiByteToWideChar等での CP_OEMCPとCP_ACPの違いを教えてください。 ANSIコードページとOEMコードページということですが、 調べてもいまいちよく理解できません。
そもそも日本語Winの基本文字コードが2バイトなのに、 マルチバイト文字が扱えなかったら糞だろう
↑ここ数レスで一番の大馬鹿
質問です。 XPビジュアルスタイルを適用してCEditを使用しています。 そこで日本語を入力して再変換を行うと文字が化けます。 ・ATOCKでは発生しません。 ・コンテキストメニューから再変換を選択しても発生しません。 _UNICODEを宣言しないで回避する方法ってありますか?
>>721 WindowsのAPIにCEditなんてないお(;^ω^)
MFCスレへドウゾ
724 :
721 :2005/08/26(金) 21:34:05
正直すまんかった… ;y=-( ゚д゚)・∵ターン
やっと今日C言語の学習が一通り終わったのでWindowsプログラミングをやりたいと思っているのですが、
なにぶん、貧乏学生なもので
>>1-4 に書かれている書籍はとてもじゃありませんが手が出せそうにありません。
初めのほうに書いてある「猫でもわかるWindowsプログラミング」というサイトと「Win32 API入門」を訪れたのですが、
後者のほうは次から次へと専門用語が出てきて困っています。
前者のサイトから学びたいと思うのですが理論的な解説なしに学ぶのは自殺行為でしょうか?
まずは動くものをどんどん作って、雰囲気をつかむのがいいと思う。 雰囲気がつかめれば理論(?)も理解しやすい。
貧乏学生なら貧乏学生なりに倹約して金貯めて買え どうでもいいことに金使わんと、必要なものにまず使えよ
本を買わない学生に未来はない
わからない単語があれば調べればいいじゃない
>>725 Win32 API入門も専門用語の羅列は 1. Win32 APIとは だけだと思うけど。
>>726-730 沢山のレスありがとうございます。
Advanced Windows は切り詰めながら買いたいと思います。
それまでは「猫でもわかる.....」で頑張ります。
>>731 Advanced Windowsは、調べても調べても手元の資料には答えが
見つからなくなったときでいいとオモタ。
>>731 俺もC終わってWin32APIの勉強してるが、推薦図書スレの
VisualC++の1読んでるがわかりやすいと思った
>>728 5千オーバーの本を何冊も買うのは学生には辛い
買ってたオレは何だったんだろうな
>>725 とりあえずPlatformSDK入れてサンプル「Generic」のソース読んで理解。
それができたら改造してみる。
このあたりから初めてみれ。
>>733 その「C終わって」っつのはいったい何だ。
少しワロタ
739 :
135 :2005/08/27(土) 05:56:14
>>136 コンソールアプリは確かにそれでいいんですが・・・
>>137 Win98では、system("echo \a")でちゃんとDOS窓が出現してビープ音が出ます。
CreateProcessA(NULL, "command.com /cecho \a", &sa, &sa, ...);
などとしても鳴ります。
私は、単なるビープ音だけではなく、例えばユーザー補助でマウスキーを設定していると、NumLockで有効になる時と無効になる時で周波数が変わっていて音で識別できるようになっている、とかそういう面白いこともやりたいわけですが・・・
例えばDeviceIoControl()なんかに特別なデバイスを指定したりとか、マルチメディア系のインターフェースでビープ音を扱える、とかはないですかね・・・? DOS時代にはビープ音で演奏するソフトが色々ありましたが・・・
なお、Win2000も使ってみました。確かにsystem("\a");でビープ音、出ますね・・・「''は内部コマンドまたは外部コマンド、操作可能な・・・」というエラーメッセージも一瞬出ますが・・・
それで
CreateProcesA(NULL, "command.com /cecho \a", &sa, &sa, ...);
はWin2000では音が鳴りません。
CreateProcesA(NULL, "cmd.exe /cecho \a", &sa, &sa, ...);
にすると音が鳴ります。
残念なのは、Win2000(のWin32)ではI/Oポートがすべてマスクされ、しかもシミュレートもない、ということですね・・・Win98では61hはアンマスクになってたりしますし、マスクされたポートも適当にシミュレートしてくれますね。スルーされるだけだったりしますが・・・
なお、MessageBeep(-1)ですが、Win98では確かに極めて短いビープ音(ボツッというような音)が鳴るのですが、Win2000ではサウンドカードからの音(MB_OKと同じ音)ですね。MSDNにはビープ音だと書いてあるのに、やはりウソが書いてあるのか・・・orz
NT3.1とかではビープ音だったんですかね?
>>739 そもそもハード的にM/Bのスピーカは周波数とか変えられるんだろか…
741 :
デフォルトの名無しさん :2005/08/27(土) 08:16:06
DrawTextで \n やワードラップで改行されるときの 行間の幅を変えるにはどうすればいいですか?
>>740 あっはっは。面白いこというなぁ。
昔はBEEPでBGMとか当たり前だし、
BEEPを通常のサウンドデバイスとしてあつかうドライバもあるのに。
743 :
デフォルトの名無しさん :2005/08/27(土) 08:39:00
単音BGMか? 今後製造されるM/Bでもスピーカの周波数が変えられることは保証されてるのか?
744 :
デフォルトの名無しさん :2005/08/27(土) 08:46:55
>>743 結果に対して仮定を持ち出す
そいつは詭弁という奴ですよ〜
745 :
743 :2005/08/27(土) 09:00:10
>>743 アナクロな技術を使うならば、単音単一周波数単一音量でもパルス制御すれば三重奏に聞こえる程度の音は作れる。
>>739 目的がよく判らんのだが、自分の端末だけでやりたいのか、他人も同じ目に遭わせたいのかその辺りは?
それから、サウンド機能を使わずにビープだけでやりたいと言う理由もよく判らんな。
>>739 つか、MessageBeep()でもまえの要求は完全に満たしてるじゃん。
・サウンドカードから音を出したい
・状況によって音を変えたい
何を前スレからうだうだ気にしてるんだ?
あとM/BのBEEP全然関係ないし。
748 :
デフォルトの名無しさん :2005/08/27(土) 09:37:28
>>739 流れがよーわからん(スレ境界またいでるの追う気力がない)が
PlaySound じゃあかんのか?
749 :
:2005/08/27(土) 09:44:21
test
>>746 むかーし、リレースイッチ?の「カチ」っていう音で
サンプラーっていうのもあったなあ。
寿命短そうだな
SpkQQ
>>750 速くスイッチングするとカチカチじゃなく、ブーンからピーンと発信音がする罠。
MessageVip()
755 :
デフォルトの名無しさん :2005/08/27(土) 11:53:23
単発ジョークでふざけたい人は頭悪スレいってくれ
>731 学生なら図書館行くとか 割と置いてあったりするし なんなら図書館に仕入れてもらうとか
親ウインドウのプロシージャでWM_CREATE時にしか実行されない子ウインドウを作成する関数(関数内にループもない) がループして困っているのですが WM_CREATEってCreateWindowしたとき以外発生しませんよね?
>>757 関数内にループが無いんなら、その関数呼び出すとこがループになってんじゃねーのか?
>>757 The WM_CREATE message is sent when an application requests that a window be created by calling the CreateWindowEx or CreateWindow function.
>>757 メッセージループの書き方が悪いんじゃ?
761 :
デフォルトの名無しさん :2005/08/27(土) 19:19:38
親ウィンドウと同じプロシージャ使ってるんじゃねぇの?
LRESULT CALLBACK WindowProc ( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam ) { PAINTSTRUCT ps; HDC hdc; switch(uMsg) { case WM_DESTROY: ResetInformationString(); PostQuitMessage(0); return 0; case WM_CREATE: IniInformationString(); SetInformationStringMax(20); CreateEditLine(hWnd,wParam,lParam); //ループしている関数 return 0; 略 default: return DefWindowProc(hWnd, message, wParam, lParam); } return 0; }
void CreateEditLine(HWND hwnd, WPARAM wParam, LPARAM lParam) { h_edit = CreateWindow ( APP_NAME ,NULL, WS_CHILD|WS_VISIBLE|WS_BORDER|ES_LEFT, 16, 450, 560, 20, hWnd,NULL, ((LPCREATESTRUCT)lParam)->hInstance , NULL ); if(h_edit == NULL) { InsertInformationString("Editline create failed"); return; } edit_proc = (WNDPROC)SetWindowLong(h_edit,GWL_WNDPROC,(LPARAM)EditProc); InsertInformationString("Chatting editline create Success!"); }
親ウインドウの作成関数の引数が激しく気になるなw APP_NAMEが指定されてるんじゃなかろうか…
>762が親ウインドウのプロシージャです。 >763が子ウインドウを作成する関数です。 SetWindowLongでプロシージャも専用のものに切り替えてるはずなんですが;
ああっやっぱり… WM_CREATE は SetWindowLong でプロシージャ切り替える前に送られるよ。
>764 APP_NAMEになってました・・・・・・orz 修正したら正常に動作しました >758-766お騒がせしてすみません;
まぁ、知らないうちには良くやることじゃな
単純なエディットコントロールを作成したんですが キーボードから入力しても文字列が表示されなくて(aaaと打っても空白のまま)困っています。 CreateWindow("EDIT","", WS_CHILD|WS_VISIBLE, 10,10,300,20, hwnd, (HMENU)1, hInstance, NULL); 落としたサンプルそのままで使ってるんですが、別のものが影響したりするんでしょうか?
ウインドウの高さが小さくね?
失礼、RECTと勘違いした。
772 :
デフォルトの名無しさん :2005/08/28(日) 17:23:26
コンボボックスの中のエディットコントロールのハンドルを取得できますか?
出来るよ。コンボだからエディットコントロールと リストボックスの合体だな。spy++で覗くと良いだろう。
774 :
デフォルトの名無しさん :2005/08/29(月) 01:49:32
フラットC#へもマルチさせて頂き恐縮ですが、どちらの掲示板にパピッポすればよいのか自信がありませんでした・・。 漢字入力を始めたときに飛んでくるWM_IME_STARTCOMPOSITIONなどを 監視して、以下のようなソフトを作りたいと思っています。 @ワード文書内において、 AIME入力、言い換えれば漢字入力を開始すると、 B入力された文字が確定されるまで、 C背景を薄いブルーにする、 というものです。 すでに私は、 ソリューションダイアログでWord.ObjectLibraryを参照するように設定することで、 @ワード文書に例えば文字列をinsertしたり、選択範囲を変更したりできるようになりました。 また、 自分のフォームに、テキストボックスから派生させたMyテキストボックスを 貼り付けて、そのMyテキストボックスに文字が入力されはじめたことを ウィンドウメッセージとして取得できるようになりました。 具体的には、派生させたクラス(Myテキストボックス)のWndProcをOverrideして m.MsgがWM_IME_STARTCOMPOSITIONかどうかを判定する機能を追加しました。 【質問】 しかしながら、Myテキストボックスでは「文字が入力されはじめたことを検知」する 機能を搭載することに成功したのですが、 ワード文書ではうまくいきません。とうかどうやるのかよくわかりません。 テキストボックスから、上記の機能を搭載したクラスを派生させるように、 例えば、Word.ApplicationやWord.Documentから派生クラスを用意して適宜同じように WndProcをoverrideすればうまくいくでしょうか。 もっとも、Word.Applicationは、インターフェース型(?)ですが。 【質問2】 思いっきりすれ違いな予感もしますが、当方VisualC#2.0 beta2 , WindowsXPsp2,Word2000です。 よろしくお願いします。
>フラットC#へもマルチさせて頂き恐縮ですが、どちらの掲示板にパピッポ ここまで読んだ。そして、その後の文章を読む気力が無くなった。
776 :
デフォルトの名無しさん :2005/08/29(月) 02:11:30
Word.DocumentClassやWord.ApplicationClassが一応はクラスですけど、 これらのクラスから派生クラスを作ってはみるものの、 WndProcなるメソッドをインテリコンボボックス(?)から 見つけ出すことはできませんでした。
777 :
774 :2005/08/29(月) 02:12:37
>>775 丸rz。。。
そんなことおっしゃらずに、お願いします(T_T)
いいから帰れ スレ違いだ
タスクバーに表示されている自分(アプリケーション)のタスクバーアイコンの キャプションをウィンドウタイトルバーのキャプションとは違うものにする方法は ないでしょうか。 googleで、タスクバー、アイコン、キャプション、タイトル、テキスト、操作、設定、api などのキーワードで検索してみましたが見つかりませんでした。
>>779 MSDN Libraryみてみたが無かった
ってか無理なんじゃね?その辺の制御はWindowsのシェルがやってる希ガス
>>779 メインウィンドウを非表示にして、メインじゃないウィンドウのタイトルを
好きに変更汁。
Win32APIをラップしたクラスを作ってるんですが、 クラス名としてどのようなものがよいでしょうか?
知るか
ひとまとめにするのはnamespaceだけにしとけ ラップする機能単位にクラス化しろ
>>780 >>781 さん
レスありがとうございます。
書き込みしてからさらに情報を探しているうちに、Delphiで作られたアプリが
>779で書いたようなことを実現していたことを思い出しました。
で"Delphi"もキーワードに加えて検索したところ、>781さんも書いている、
タスクバーアイコンを非表示にしたウィンドウとデスクトップ外に表示した
ウィンドウの2つのウィンドウを使って1つのウィンドウに見せかける(Delphi
ではこれがデフォルト?)、というやり方を見つけました。
ポイントとしてはSetWindowLongあたりでスタイルを変えるというめどは
つきましたが、使っている言語がHSPなのでうまくいくかどうか不安です。
ではとりあえず消えます。ありがとうございました。
>>785 悪いこと言わんからDelphiなりVC#にでも開発環境変えれ。
HSPはHSPの提供してる機能以上のことやると他の環境以上に手間がかかる。
787 :
デフォルトの名無しさん :2005/08/29(月) 11:32:56
お勧めはDelphi
お勧めはBC++
789 :
デフォルトの名無しさん :2005/08/29(月) 13:26:56
このスレで良いのかどうかわかりませんが... windowsの起動時に「ctrl+alt+delキーを押して開始してください画面」から、 「ctrl+alt+del」→「任意のユーザー名、パスワード、ドメイン名にてログオン」 ということが、外部PCからの制御でしたいのですが、なかなか出来ません。 まずは簡単なサービスを作ってウィンドの挙列をして、 強引にプログラムから入力してみようとしてみましたが、 普通のウィンドウではないらしく、setwindowtextなど出来ませんでした。 いずれにしてもサービスで外部からのコマンド等を受信してからの 作業になると思いますが、どのように進めて行けば良いのでしょうか? ご存じの方、よろしくお願いします。
791 :
デフォルトの名無しさん :2005/08/29(月) 13:52:57
>>790 実は以前GINAを調べていたのですが、
結構ハイリスクだったので諦めた経緯があります。
何か姑息な手段でも良いのですが他に方法なないでしょうか。
それともはやりGINA必須でしょうか。
ハイリスクノータリーン
ハイリスクノータリーン
794 :
793 :2005/08/29(月) 14:48:33
って、既にその方向性だったのか orz
ハイリスクタリラリラーン
外部からログインするならGINAさわる必要ないだろ
>>789 は外部から対話ログインしてその後どうするつもり?
全部SendMessageとかで他プログラム制御するのか?
797 :
717 :2005/08/29(月) 16:00:20
スルーされてしまったようなのでもう一度。
798 :
デフォルトの名無しさん :2005/08/29(月) 16:53:16
>>796 外部から対話ログインしたいのではなく、
外部からの制御でctrl+alt+del→ユーザー名パスワード、ドメイン名の入力を
済ませたいのです。
例えばカードリーダーや指紋認証等と232C等で通信して、
ログインするユーザーやドメインを変えたいということです。
「ctrl+alt+delキーを押して開始してください画面」
の状態のパソコンを上記の操作で自動的に任意のユーザーでログオンさせたいのです。
よろしくお願いします。
スレッド毎に(スレッドローカルな)データを持たせたいのですが、 そういうAPIは用意されてますか? 今はグローバル変数の配列にtid毎にポインタを割り当てているのですが、 これだとアクセスする度に検索しなくてはならないので非常に遅くなります。 ご教示お願いします。
>>799 TlsAlloc、TlsGetValue、TlsSetValue
この辺か?
一瞬GAINかと思った・・
>>800 ありがとうございました。まさにソレです。
>>798 スマートカード認証ならますます素直にGINAを使えって話になるが
まさにそのための機能だしね。 まあThinkPadの指紋認証みたいなポカ作り込まないように気を付けてがんばれ。
806 :
デフォルトの名無しさん :2005/08/29(月) 20:37:27
808 :
デフォルトの名無しさん :2005/08/29(月) 21:20:40
>>807 ドライバとのインターフェイスに限定して考えてるか?
SetWindowsHookEx()でスレッドIDに0を指定して、インスタンスハンドルをちゃんと指定した場合、 現在のプロセス、かつ、現在のプロセスで作成された全てのスレッドに対してフックできますか?
やってみりゃいいじゃなーい?
811 :
デフォルトの名無しさん :2005/08/29(月) 23:16:07
GINAを調べてみましたが、GINAのdllは基本的に 何かの状態変化の時に呼び出されるコールバック関数の様なものの固まりに見えます。 実際、「ctrl+alt+delキーを押して開始してください画面」 の状態の時、外部(232C等)からの情報は何処で受け取って、 受け取ったあと、どのように処理すれば良いのかわかりません。 LogonUserとかでtokenを取得し、その後デスクトップの処理する事になるのかな。 それならGINAとかあまり関係なさそうだし。 どうGINAと絡めばいいのでしょう... おわかりの方、よろしくお願いします。
ctrl+alt+delキー押されたとき呼ばれる関数があるやろ そこで「カードをかざせ」みたいなダイアログだして シリアルポートからカード情報読んで 簡単なつくりにするなら、 カード情報と認証情報結び付けといて その認証情報でLogonUser でプロファイル読んだりしてシェル立ち上げておしまい
馬鹿にしないでください。それでわかるくらいなら質問しません。
ワロタ
815 :
789 :2005/08/30(火) 08:51:15
>>812 情報、ありがとうございます。
>ctrl+alt+delキー押されたとき呼ばれる関数があるやろ
はい。ありますよね。
しかし、私が思っているのはその前の
「ctrl+alt+delキーを押して開始してください画面」
の時点、つまりパソコンの電源を入れて上記画面で止まっている状態から
外部機器からの操作でログイン→デスクトップ表示まで行きたいです。
ctrl+alt+delの操作を省きたいのです。(が、表示は普通に出しておきたい。)
そこで思ったのは、もしかすると私のやりたいことはGINAに直接関係なく、
少なくともWlxから始まる関数の処理はしないでも、
上記「ctrl+alt+delを押して...」の時点で、
サービスによりLogonUserでtokenを取得し、
812氏の仰る「プロファイル読んだりしてシェル立ち上げておしまい 」
なのではないかと思ったのですが、
「プロファイル読んだりしてシェル立ち上げておしまい 」
の方法が今のところわからず、試せずにいます。
なにか情報が有れば、引き続きよろしくお願いします。
>>815 GINAやWinLogonのことはよく知らないけど横レス。
つまりWinLogon.exeの知らないところで自前のプロセスで
対話ログオンを行うというアイディア?
それでシェルが上がったとしてもちゃんと動くのかなー?
勉強で作りたいならいいけど動作保証が必要な仕事なら
その方法はキツいような臭いがする。
検討するにしても789の理解では難しいような気がするよ。
> プロファイル読んだり
LoadUserProfile
> シェル立ち上げて
HKLM¥SOFTWARE¥Microsoft¥Windows NT¥CurrentVersion¥Winlogon
のShellに書いてるのを上げる。userinitが先かな。
デスクトップ作ったり(切り替えだけかも)しないとアカンような気もする。
817 :
816 :2005/08/30(火) 09:57:32
自己レス。
>>816 > HKLM¥SOFTWARE¥Microsoft¥Windows NT¥CurrentVersion¥Winlogon
HKCUにもあったような気がした。
818 :
789 :2005/08/30(火) 10:26:53
>>816 >WinLogon.exeの知らないところで
なるほど。
確かにOSが管理出来なくなる様な事になりそうではありますね。
う〜む。しかし、GINAとなるとどの時点で外部からの制御を処理すれば良いのか...
もう少し探ってみます。
よろしくお願いします。
819 :
816 :2005/08/30(火) 12:17:17
>>818 > GINAとなるとどの時点で外部からの制御を処理すれば良いのか...
よくわからないので間違ってるかもしれないけど。
初期化時とかにスレッドなりウィンドウなり作ってそこで通知を
待つとかポーリングとかすればいいんじゃない?
で、来たらWlxSasNotify呼ぶのかな?
とにかくWlxSasNotify呼んでるサンプルを見つければいいような
気もする。
820 :
Omoti :2005/08/30(火) 13:41:22
WIN32APIの質問をしたいんですけど、いいですか?
821 :
Omoti :2005/08/30(火) 13:49:41
RGSSというプログラムで、以下のコードをかきました。
目的の動作は、
「WEBブラウザーを起動して、こちらの指定のURLを表示する」
という、シンプルなものです。
ただ、起動するブラウザーのウインドウの数は、1個だけに制限するという仕様です
(いくつもウインドウが立ち上がるとメモリが足りなくなるため)
shellexecute = Win32API.new('shell32.dll','ShellExecuteA',%w(p p p p p i),'i')
shellexecute.call(0, 'open', '
http://www.google.co.jp/ ', 0, 0, 1)
このコードを実行すると、パソコンにゾーンアラームなどファイヤーウオールがはいっていると、
「RGSSというプログラムがネットに接続しようとしているが、許可するか?」
とでてきて、
「許可する」
を押すのですが、そのあとすぐに
「スクリプトがハングアップしました」
となってRGSSが強制終了してしまいます。
RGSSはrubyを元にして作った言語ですので、rubyのメーリングリストでも聞いてみましたが
「どうもRGSSのバグではないか」
という話になってますが、win32apiの立場から見て、どう思いますか。
あぼ〜ん
>>821 RGSSの言語仕様知らんから、ShellExecuteの引数だけ確認したが問題ないと思う
RGSSのバグじゃまいか?
Winの仕様だと思うが。 Cで書いたShellExecuteを呼ぶだけのプログラムでも、 なぜかそのプログラムがZoneAlarmにトラップされ一時停止するしな。 RGSS的にはShellExecuteから戻ってこない→ハングアップしますた。で問題ないと思うが。
A BoneとかでリンクをクリックしてもなかなかIEに渡らないのはそのせい? Ctrl+TabでIEをアクティブにするといきなり開くんだけど。
ひょっとしてFWに捕まった後、次からはスルーされるように設定した後の話じゃなくて
FWに捕まったときの話なのか?それなら
>>824 だと思う
>>815 セキュリティポリシーでctrl+alt+delキー不要にしたらダイアログ勝手に出てくるから
そのダイアログでシリアルポートポーリングするのは駄目か?
これもGINA変更が必要だけどそれ以外思いつきません。
828 :
デフォルトの名無しさん :2005/08/30(火) 19:08:30
漢字入力を始めたときに飛んでくるWM_IME_STARTCOMPOSITIONなどを 監視して、以下のようなソフトを作りたいと思っています。 @ワード文書内において、 AIME入力、言い換えれば漢字入力を開始すると、 B入力された文字が確定されるまで、 C背景を薄いブルーにする、 というものです。 すでに私は、 ソリューションダイアログでWord.ObjectLibraryを参照するように設定することで、 @ワード文書に例えば文字列をinsertしたり、選択範囲を変更したりできるようになりました。 また、 自分のフォームに、テキストボックスから派生させたMyテキストボックスを 貼り付けて、そのMyテキストボックスに文字が入力されはじめたことを ウィンドウメッセージとして取得できるようになりました。 具体的には、派生させたクラス(Myテキストボックス)のWndProcをOverrideして m.MsgがWM_IME_STARTCOMPOSITIONかどうかを判定する機能を追加しました。 【質問】 しかしながら、Myテキストボックスでは「文字が入力されはじめたことを検知」する 機能を搭載することに成功したのですが、 ワード文書ではうまくいきません。とうかどうやるのかよくわかりません。 テキストボックスから、上記の機能を搭載したクラスを派生させるように、 例えば、Word.ApplicationやWord.Documentから派生クラスを用意して適宜同じように WndProcをoverrideすればうまくいくでしょうか。 もっとも、Word.Applicationは、インターフェース型(?)ですが。 【質問2】 思いっきりすれ違いな予感もしますが、当方VisualC#2.0 beta2 , WindowsXPsp2,Word2000です。 よろしくお願いします。
WORDのOLEはアウトプロセスだったはず。 DLL使ってフックしたりするしかないのではないかなぁ。 本質的には外のWORDを乗っ取るのと同じ事だから。
830 :
789 :2005/08/30(火) 20:40:28
>>819 >>827 仰られるあたりを踏まえて
色々やってみます。
ありがとうございます。
少し時間がかかると思いますが、
何かわかればまた報告に来ます。
Rebarで、ウィンドウサイズ変更をすると、Gripとシェブロンの部分がちらつくんですが、 IEのようにちらつかないようにするにはどうすればいいのでしょうか? よろしくお願いします。
WTLのソースコードを参照
833 :
831 :2005/08/30(火) 21:44:55
>>832 今、最新のWTLのソースコードをGETして、何かサンプルアプリをビルドしてみましたが、
リバーのグリップが、ちらちきますね。
IEだと、まったくちらつかないんですよ。
たぶん、何か技があるとおもうのですが、ご存知な方はいらっしゃいませんか?
是非教えていただきたいと思いますが。
(誤)リバーのグリップが、ちらちきますね。 (正)リバーのグリップが、ちらつきますね。
試しにおいらの作ったWTL使用ソフトで試したけど、一切ちらつかないぜ
836 :
831 :2005/08/30(火) 23:05:49
それ、カスタマイズしてるんじゃないんですか? 僕が試したWTLは、ピュアなものですから。
うちのピュアなWTLでもちらつかないぞ。
プログラムの追加と削除にアンインストーラを入れる方法。 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall にキー作って、タイトルとパラメータ入れるトコまでは解ったのですが、 アプリケーションサイズはどのように設定するのでしょうか?
839 :
Omoti :2005/08/31(水) 01:47:22
>>821 >>823-826 ハーフライフとか、市販のゲームでネットにはじめて接続しようとしたときに、
当然ゾーンアラームで検知されて、
「ハーフライフというゲームがネットに接続しようとしているが、許可するか?」
という、同じようなダイアログがでてきます。
でも、そのあいだ、ハーフライフはずーーとおとなしく「おあづけ」状態でおとなしく待っていて、
ゾーンアラームの「許可」のボタンを押した後に、何事もなかったように素直にゲームに復帰できます。
ところがRGSSはいったんゾーンアラームに処理が移ると、それでゲームごと強制終了してしまうんです。
スクリーンショットは画像はこんな感じです。
http://www.net24.ne.jp/~omoti/game-link/hangu-up.html
FW切ってたらどうなるんだ?
841 :
Omoti :2005/08/31(水) 02:39:43
>>840 そりゃーなんの問題もおこりませんよ
だれにもとめられないんですから
RGSSが、時間の掛かるスクリプトを殺す仕様なんだろ。
843 :
Omoti :2005/08/31(水) 06:52:32
>>842 それはちがうとおもいます
ネット上のURLを拾いに行かないで、
パソコン内のローカルなHTMLファイルを参照しながら
IEを起動するようにしたら、ゾーンアラームで検知しないので
IEが起動して、その起動したあとに、ネット上のURLを表示する
ようにしたら、そこではじめてゾーンアラームが検知して
「許可するか?」
という、ダイアログを出してきますけど、そこで
「ゆっくりと」
時間をかけて「許可する」のボタンをおしても
なんの問題もおこりません
つまり、「許可する」のボタンをおしたら、そのままゲームにもどって
プレイを続行できます。
844 :
Omoti :2005/08/31(水) 06:56:14
>>843 >ネット上のURLを拾いに行かないで、
>パソコン内のローカルなHTMLファイルを参照しながら
>IEを起動する
これは具体的には、「readme.html」のようなファイルを別途、つくっておいて、
ゲームのフォルダの中につっこんでおいて、この「readme.html」を開くという
スクリプトを第一段階目で組んで実行するわけです
shellexecute = Win32API.new('shell32.dll','ShellExecuteA',%w(p p p p p i),'i')
shellexecute.call(0, 'open', 'readme.html', 0, 0, 1)
こういうふうに。そうすると、readme.htmlを読み込みながらIEが起動して、
IEのウインドウが開いたままの状態で今度は
shellexecute = Win32API.new('shell32.dll','ShellExecuteA',%w(p p p p p i),'i')
shellexecute.call(0, 'open', '
http://www.google.co.jp/ ', 0, 0, 1)
を実行します。するとすでにIEは開いているので、それ以上、わざわざIEを
開くという作業はなしで、いきなり
http://www.google.co.jp/を既存のIEのウインドウで 開こうとして、ここでゾーンアラームが検知をしまして
「許可するか?」
という、ダイアログを出してきて、「許可する」を押すと、
そのまま何も問題なく、ゲームが続行できます。
845 :
Omoti :2005/08/31(水) 07:07:09
こんどは別な質問です。 IEの ツールTの中の、 インターネットオプションOの中の、 詳細設定の中の、 ブラウズの中の、 ショートカットを起動するためにウインドウを再利用する の、チェックがどうなっているか、取得する方法はありますか?
846 :
デフォルトの名無しさん :2005/08/31(水) 07:42:58
spy++でしらべれ
>>845 HKCU\Software\Microsoft\Internet Explorer\Main\AllowWindowReuse
辺りじゃないか?
848 :
Omoti :2005/08/31(水) 10:28:35
>>847 それってWin32apiの立場から、見えるんですか?
>>848 Win32APIにレジストリの読み書きをする関数がないなんてありえない。
850 :
Omoti :2005/08/31(水) 11:10:32
>>849 ということは、Win32apiをいじれるということは、
レジストリの読み書きもできると?
851 :
Omoti :2005/08/31(水) 11:11:33
レジストリの読み書きができると、何か、面白いことができる?
852 :
Omoti :2005/08/31(水) 11:12:46
他人のパソコンのレジストリを 読んだり 書いたり 変更したり できると、何かおもしろいことができる?
>>850 だからWin32APIの中にはレジストリを読み書きする関数が存在する。
じゃなきゃ俺達どうやってレジストリを扱えばいい。
レジストリの読み書きはわざわざそれに特化した関数を使わなくてもCreateFile、ReadFile、WriteFile、CloseHandleでできると思うけどどうよ?
Omoti死んでくれ
無理だと思うけどどうよ?
858 :
デフォルトの名無しさん :2005/08/31(水) 14:36:34
フォントをラスタライズするAPIって無いですか? 文字列とパラメータ入れたら、ビットマップ配列が得られるような。
>>858 そのままズバリのAPIはなかったと思う
CreateDIBSectionでHBITMAP作って、
それを関連付けたDCに文字列描画したら、
それと同じようなことが出来るんでない?
>>858 GetGlyphOutline()
単純に、メモリDCに書けばいいという気もするが。
861 :
859 :2005/08/31(水) 14:45:15
ぐは、そんなのあったのか、撃つ出し脳
答えの出た後にその頭の悪いレスは無いだろう
864 :
858 :2005/08/31(水) 15:01:02
早速のご回答ありがとうございます。
そうか、DC使えばできるのか。
DCの実体というか、画素配列にダイレクトにタッチしたことないから
すっかり意識の外でした。
>>859 おお、なるほど
>>860 そうですね
>>862 そうします。
865 :
858 :2005/08/31(水) 15:17:59
げふ、見落としていた
GetGlyphOutline()か、
>>860 ありがとう
866 :
デフォルトの名無しさん :2005/08/31(水) 17:02:07
インターネットのオプション ダイアログを開きたいんですが、APIはありますでしょうか? C# のコードから開きたいのですが…
ShellExecuteでinetcpl.cplとかじゃダメか?w
868 :
866 :2005/08/31(水) 17:42:03
ありがとうございます。目的のことができました
>>867
869 :
828 :2005/08/31(水) 19:37:48
>>829 ご返答まことにありがとうございます。 そうですかぁ、WordObjectLibraryから検知するのは 難しいんですかぁ。 ならば、質問を変更させていただき、 Wordで未確定文字があるかないかを検知可能な手段は ないでしょうか・・・?? なんていかがでしょうか。 僕もいろいろググってるんですけど、なかなか有益な情報に たどり着けないで降ります。 よろしくお願いします。
でもマルチポストは止めないんだな。
871 :
デフォルトの名無しさん :2005/08/31(水) 20:42:42
telnetでtelnet先のプログラムを実行して telnetを切断しても常駐させるにはどのようにしたらよいですか? win2000 → win2000
872 :
デフォルトの名無しさん :2005/08/31(水) 20:46:15
マルチポストが何か関係あるのか? 非難するにも論点を間違えてると大だらずにしか見えんけ
マルチポストするような奴はカエレってことだろ
874 :
828 :2005/08/31(水) 21:07:08
ふらっとC#掲示板へも同じ内容で投稿させていただいてます。 正直、どっちに投稿すればいいのかわからないんです。 すみません。
875 :
デフォルトの名無しさん :2005/08/31(水) 21:11:06
ダブルフォールトで確定だな やっぱり大だらずか・・・
質問以外に食いつくだけのヤツはカエレ
>>871 win同士じゃ無理かと
モードレスダイアログって呼出し元と同一スレッドっていう認識でOK?
は?
879 :
デフォルトの名無しさん :2005/08/31(水) 21:52:39
>>877 OK
ノンプリエンプティブの範疇で論じることができる
ダイアログボックスのエディットコントロールに入力した文字列 を親ウィンドウで受け取りたいのですが、どうすればいいんでしょうか。 EndDialog()では、int型しか返り値にできないみたいなんですが。
>>880 EndDialogより前にSendMessage()やその他何らかの方法で親ウィンドウへ文字列を送ればいい。
あるいはアトム化すればEndDialog()で返すこともできるね。一般的な方法ではないだろうけど。
882 :
828 :2005/08/31(水) 22:07:32
this.AddOwnedForm(CViewWindow.Opener()); CViewWindow.Opener().Show();
>>881 親ウィンドウのハンドルが取得できなくて困っています。
DialogBox()で指定してGetParent(ダイアログのハンドル)とやっても
失敗してしまいます。
886 :
880 :2005/08/31(水) 22:46:21
>>881 自己解決できました。
GetWindow()をつかったらうまくいきました。
887 :
877 :2005/08/31(水) 23:23:25
>>879 了解致しました。ありがとうございました!
ディスパッチの意義がよくわかりません。 某IT用語辞典によれば、リソースを割り当ててその優先順位がなんとら・・で ああだからコンソールアプリはディスパッチが必要なかったのか程度しか理解できません。 誰か俺でもわかるようにお願いしますorz
Dispatch自体はわりと一般名詞なんでどのDispatchについて聞かれてるのやら?
891 :
デフォルトの名無しさん :2005/09/01(木) 11:38:14
マルチスレッドなプログラミングで、かつ、フックプロシージャを 複数インストールする場合(ローカルフック)、フックハンドルの 保存の仕方で良い定石みたいなのがあるんでしょうか? 普通にstatic変数で保存すると結構な数になってしまうもので…
>>ALL 馬鹿にしないでください。それでわかるくらいなら質問しません。
ディスパッチま〜やの冒険
メッセージのプロシージャへのディスパッチの事を自分的になり理解してきました・・・ いわゆるスレッドを作るときの関数指定と同じ事なんですね。 浅学ってのは無知と実感しますた('A`)..
なんだ自分的になりって('A;:..:..
いやむしろ俺は「浅学ってのは無知」に突っ込みたい。 そりゃそうだろと
普通は浅学。 深学するのは、オタクだけ。
ごめんワルカッタヨ 浅学は無知→浅学は罪と書きたかったんだorz
またフックか・・・
902 :
891 :2005/09/02(金) 14:34:32
自己解決。スレッド・ローカル・ストレージで解決できそう。
903 :
デフォルトの名無しさん :2005/09/02(金) 18:07:22
初心者質問スマタ WindowsXP C言語 BCC+BCCDeveloperでやっております。 char DataA[50]; char *DataB=(char *)malloc(50); という二つのバッファを用意して ReadFile()の第二引数に指定すると、DataBでは上手くファイルの内容を格納できるのですが DataAではReadFile();関数は失敗し、GerLastError()でのエラーメッセージは 「メモリロケーションへのアクセスが無効です」となります。 この違いはなんなのでしょうか。よろしくお願いします
904 :
デフォルトの名無しさん :2005/09/02(金) 18:14:31
休止状態からの復帰時にプログラムを実行させたいです。 常駐することなしにこれを実現したいのですが、どのようにしたらいいでしょうか。 よろしくお願いします。
905 :
デフォルトの名無しさん :2005/09/02(金) 18:37:01
>>903 ソース出せ。&DataAとかやってたらヌッコロス。
>>904 やれやれだぜ。アビバへ行け。
>>903 よくわからんが、↓の関係じゃねーの?
>読み書き操作用のバッファのアドレス(メモリ内のアドレス)を、ボリュームのセクタサイズの整数倍に整列(セクタ整列)させなければなりません。
908 :
904 :2005/09/02(金) 18:45:07
>>905 浴び馬レベルでしたかorz すみません。
ただ、休止状態からの復帰なので、スタートアップやレジストリなどに書いても駄目でした。
何かヒントください(クレクレですみません)
なにも常駐させずに、というのは無理だろ。
>>907 そういわれてもMSDNにはそう書いてあるが
ペ
>>904 PBT_APMRESUMESUSPENDメッセージかな?
The PBT_APMRESUMESUSPEND event is broadcast as a notification
that the system has resumed operation after being suspended.
A window receives this event through the WM_POWERBROADCAST
message. The wParam and lParam parameters are set as described following.
繰り返すけど、常駐プログラムなしに検出するのは不可能。
ただ、レジュームを検出する常駐プログラム自体はメモリ、CPU使用率の面で羽のように軽くすることはいくらでもできる。
検出する以外なにもしないプログラムをかけばいいだけ。
レジュームイベントを検出したら、何らかの方法で実行したいプログラムを外部から動的に呼び出す。
呼び出す手法は、
簡単なのではShellExecuteでexeファイルをキック。
あるいはDllで実装したのを呼び出す。
COMを使ってコンポーネントとして実装したのを呼び出す。など
ポ
>>911 >FILE_FLAG_NO_BUFFERING フラグを指定してファイルを開いた後、
>そのファイルの作業を行う場合、アプリケーションは次の各要件を満たさなければなりません。
まぁ、質問者がこのフラグを指定しちゃってる可能性もゼロじゃないけどさ・・・
917 :
>>903 :2005/09/02(金) 19:28:37
>>905 ,
>>906 ,
>>907 ありがとうございます。色々試していました。が、やはりできません。
FILE_FLAG_NO_BUFFERINGは指定していないです。
char DataA[32000];
hFile=CreateFile(
"a.txt",//ハンドルを得るファイル名
GENERIC_READ,//読み取りアクセス
0,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL
);
ReadFile(
hFile,//内容を読み取るファイルのハンドル
DataA,//読み込んだ内容を格納するバッファ
32000,//読み込むバイト数
&readsize,//読み込んだバイト数を格納する
NULL
)
という感じです、遅れてすいません
>>917 あ、わかった。
char DataA[32000];
↑これが原因。
スタックメモリにはこんなにたくさん確保できないんでしょう。
ヒープにしなきゃだめ。
追記。 ためしに、 char DataA[32000]; for (int i=0;i < 32000;i++) DataA[i] = 0; てやってみ。 アクセスエラーでるから。
高々32KB弱でダメかなぁ……
>>917 処で、readsizeの宣言はどうなっている?
#いや、念の為だ。
922 :
920 :2005/09/02(金) 19:43:44
すまん。やっぱ違うな。 確かに32kぐらいではアクセスエラー起きんわな。 すまん。
俺の環境では65536でも平気だが。 普通にスタックメモリから65536ぐらい取ってるぞ。 スタックから取れば手動で開放する必要ないし宣言した量以上入れない限りバグも起きにくい。
>>921 DWORDか、unsigned long以外で宣言しててもコンパイルでエラーが出るはずだが
>>922 デフォルトだと1Mだな、スタックは
ただ、
>>917 がスタックサイズを変えてなければ、だが
ちょっとこの情報だけでは特定できんな。 なにかの拍子にDataAのスタックが壊れてるとか。 実はリビルドしたら直ってました、とかいうオチとか。 どうせwhileループかなんかで囲ってるんだろうけど 適切なループ処理ができてないとか。 いろいろあるからな。
927 :
電車男903 :2005/09/02(金) 21:08:55
おまいら・・みんなありがとう じゃなくて本当にすいませんでした・・ わかりました。。 失敗していたときは 第三引数で指定した値より小さいバッファを渡していました。。 最初のmallocで確保か、配列として定義か〜〜 という時点でどちらもバッファのサイズが小さかったのですが mallocの時はReadFileが失敗しない事が原因でした。 すいませんでした! しばらく沈没してますです。。
沈没しなくていいから解決した喜びを味わいつつ今夜のオナヌーのおかずを探しとけ
は・・はひ、隊長・・
なんか脱力感だけが残るな。
マウスポインタを2つに増やしたいんだけぢ、無理だよね?
うん
>>934 おおすごい。.NET2005でXP専用か。
VC5では作れないのかな。
936 :
デフォルトの名無しさん :2005/09/03(土) 07:49:58
8月初めあたりから、WTLを勉強してたんですが、 MFCよりWTLのほうが明らかに使いやすいですね。 いまだにMFCで開発とかされてるけど、やっぱMFCの人気はあるのかな?
WTLってやっぱりマイナーだからな 会社なんかが使ってたら使わざるを得ないし 漏れ1人だけWTL使うぜ!って訳にはいかない罠
会社なんかじゃトラブルへの対応や新入社員への教育やらを考えると新しいものを習熟するより 古くても熟知してるものを使う方がコストが低く済むだろうからねぇ。
でも、MFC好きな人っているのかな?
そりゃまあいるだろう。好みは人それぞれだし。 俺は駄目だが。
WTLじゃイベント追加する時とかにIDEの自動追加機能とか使えないからなあ
IDEが勝手にC++のコードを生成するのって、なんかなじめないんだけど。
空気なんか知るか!
XPでタスクトレイのスピーカークリックしたときに出るボリューム調整の小さいウィンドウを トグル表示するAPIありませんか?どうも見つからなくて
948 :
947 :2005/09/03(土) 14:30:23
自己解決しました。 sndvol32.exe /r or /t or /sという表記をみつけ、/tで実行したらマウス位置にポップアップされました
32bppのアルファチャネル付きアイコンについての質問です。 LoadImageなどで、得たHICONから、 8bppのアルファチャネルのデータを得る方法ってありますか? GetIconInfoのICONINFO.hbmMaskだと、1/0の2階調しか得られません。 LoadImageしたHICONをDrawIconすると、256階調アルファで レンダリングされるので、内部では8bppのアルファを持ってると思うんですが。
950 :
Omoti :2005/09/03(土) 15:33:35
しつもん 本屋でwin32apiの本を立ち読みしてたら(カネは払わない) 「win32apiを使うとメモリ操作ができるよ」 って書いてあったのですが、メモリ操作ができると、 どういう楽しいことができるの?
一般保護例外で死ねる。
952 :
Omoti :2005/09/03(土) 15:41:38
ゲームのステータス書き換えてウハウハ
ソフトのクラックができる
バッファオーバーフロー脆弱性が実装できる。
>>955 流行の"脆弱性"を実装できるのか。
それはいいな。
>>949 hbmColorのほうにアルファ情報込みで入ってる
hbmMaskは非対応のディスプレイドライバでも
2階調の透過はできるようにするために入ってるだけ。
959 :
Omoti :2005/09/03(土) 19:52:08
しつもん win32apiって本はあんまり出てないけど MSDNとかって言うのを見れば全部のってるの? それは、無料でみれるの?
英語版MSDNなら大体全部載ってる
961 :
Omoti :2005/09/03(土) 19:53:33
ちなみにVB4はもってます これでみれるの?
962 :
Omoti :2005/09/03(土) 19:54:33
いま、shellexcuteっていう関数について調べてるんです
大文字と小文字の区別をちゃんとしようぜ
964 :
Omoti :2005/09/03(土) 19:55:48
わかったeが抜けてるから検索できないんだ shellexecute
965 :
Omoti :2005/09/03(土) 19:56:21
>>963 どして?
case sensitvieなの?
Omotiウザス
>>965 大文字小文字区別しないような言語でもAPI関数だけは必ず区別されるから
>>966 // for Jane View
設定(&O);
設定(&O);
機能.あぼーん.NGName << "Omoti";
969 :
デフォルトの名無しさん :2005/09/04(日) 13:52:56
NG登録完了
Omotiちゃんは女の子だからやさしくしてやれよ。
いい歳してこんな稚拙なコミュニケーション能力しか持ってない人間がこの世にいるなんて思いたくない
何故人類全体とか夢とかスケールを大きくするw
>>973 「…人間がこの世に…」となればその規模だろ。
どぉでもいい
↑照れ隠し それより次スレは?
どぉでもいい
979 :
デフォルトの名無しさん :2005/09/04(日) 21:49:38
むしろどぉでもいい
次スレ(゚听)イラネ
>>980 おいおい、Win32APIのスレは需要大だろ。
むしろ、C/C++関連のスレで一番需要があると思うね。
C/C++の言語仕様に関する質問は解説書が充実しているのでわざわざ質問するのもあほらしいが、
Win32APIは決定版というべき解説書がないし、独特なクセもあるし。
983 :
デフォルトの名無しさん :2005/09/04(日) 22:51:38
>C/C++関連のスレ
ここってC/C++関連のスレなのか
まぁ、世の中にはC/C++、Win32API、VisualC、MFCの区別がつかない奴もいるわけで。
986 :
デフォルトの名無しさん :2005/09/04(日) 23:04:43
こんばんわ、質問があります。 環境C++6.0 windowsxp 今、ハードディスクやCDの容量を調べるプログラムを組んでいます。 GetDiskFreeSpaceExをつかって、ハードディスクの使用量と空き容量は入手できたのですが、 焼かれたCDの空き容量が0になってしまうのです。マイコンピュータのCDドライブのところから、 プロパティを開くと空き容量が表示されるのですが、プログラムでそれを入手することが出来ないのです。 基本的な質問ですが、知恵をお貸し願えませんでしょうか? よろしくお願いします。
マルチ氏ね
>>986 belutionとかにも書いてるだろヴォケ
>>986 それどんなCD-Rなんだ?
たまたま手元に、埋まってないpacket write(B's CLIP)のCD-Rがあったんで
試してみたが、普通に空き容量取れたよ@Win2k
session closeしたCD-Rだと空き容量ゼロ。当然だけどな。
普通のCD-ROMも当然空き容量ゼロ。
ULARGE_INTEGERの使い方とか間違えてHI DWORDしか読んでないとかいう
つまんない落ちじゃないよね?
質問です。 アニメーションなどの画像の重なりによるちらつきをなくしたいのですが、 ウィンドウを固定にし、画面外に重ねる画像を表示して 画面内にコピーするというアイデアを思いついたのです。 しかしBitBltのSRCCOPYだと写ってはいないけれど、 画面外の領域を指定すると、そのまま画面外(ウィンドウの外) のものがコピーされてしまいます。 多少強引で構わないので、擬似的にダブルバッファリングのような ことはできませんか?
なんで擬似的?
993 :
Omoti :2005/09/05(月) 01:11:26
Omoti 透明化完了
つぎすれよりネクスレの方良くない?
とりあえず梅
UME
0x3E6
0x3E7
0x3E8だったら秀丸超えるテキストエディタ作る
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。