Win32API質問箱 Build47
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2006/11/13(月) 08:56:12やさしいお兄さんやお姉さんたちが答えてくれるかも。
過去スレ、関連リンクは>>2-5くらい。
■注意
・質問する前にMSDNライブラリやPlatformSDK、Google等で検索しましょう。
・日本語版MSDN Online Libraryは不完全です。英語版(http://msdn.microsoft.com/library/)の利用推奨。
・APIフックなど高度な事をしたい場合はできるだけAdvenced Windowsを読みましょう。
・言語特有の問題やIDE、MFCやVCLなどの質問はそれぞれの言語や開発環境スレで
0302デフォルトの名無しさん
2006/11/23(木) 20:29:01実装と用途による。
0303デフォルトの名無しさん
2006/11/23(木) 20:30:54foutが何かは知りませんが、大き目のファイルを一気に書くような用途では
ストリームを使ってもAPIを直接使っても大して速度は変わらないと思います。
∵一般的にI/Oに時間が掛かりますから。
0304デフォルトの名無しさん
2006/11/23(木) 20:34:39たぶんfopen()とかはCreateFileで実装されてる
0305デフォルトの名無しさん
2006/11/23(木) 20:41:390306デフォルトの名無しさん
2006/11/23(木) 20:58:57って結局ドライブ自体かvwin32をCreateFileで開かないといけないわけか。
0307デフォルトの名無しさん
2006/11/23(木) 21:00:060308デフォルトの名無しさん
2006/11/23(木) 21:19:000309デフォルトの名無しさん
2006/11/23(木) 21:53:00正解は304
0310デフォルトの名無しさん
2006/11/23(木) 22:08:18同様にLoadLibraryで読み込まれたDLL内で確保したメモリがFreeLibraryで解放されるのでしょうか?
0311デフォルトの名無しさん
2006/11/23(木) 22:18:51されない
DLL作る人は気をつけよう
0312デフォルトの名無しさん
2006/11/23(木) 22:32:56レスありがとうございます
解放されないんですね、気をつけます
0313デフォルトの名無しさん
2006/11/23(木) 22:35:23・・・考えたら、されたら困るよな・・・
0314デフォルトの名無しさん
2006/11/23(木) 22:58:050315デフォルトの名無しさん
2006/11/23(木) 23:00:09違う最強なのは僕
0316デフォルトの名無しさん
2006/11/23(木) 23:01:350317デフォルトの名無しさん
2006/11/24(金) 00:14:510318デフォルトの名無しさん
2006/11/24(金) 01:55:46WM_PAINT内に以下の記述をしています。
draw() // OpenGLの描画関数
SwapBuffers(wglGetCurrentDC());
HDC hdc = BeginPaint(hwnd, &ps);
〜マウスドラッグによる四角の描画〜
EndPaint(hwnd, &ps);
すると、マウスドラッグで描かれた四角の部分がチラついてしまいます。
このチラツキを防止するにはどうすればよろしいでしょうか。
0319デフォルトの名無しさん
2006/11/24(金) 01:57:530320318
2006/11/24(金) 02:25:33どうも。以下にようにしてもチラつきました。
何か間違ってるでしょうか?
HDC hdc_bkbuf = CreateCompatibleDC(hdc);
HBITMAP hbmp = CreateCompatibleBitmap(hdc, width, height);
HBITMAP hbmp_old = (HBITMAP)SelectObject(hdc_bkbuf, hbmp);
〜hdc_bkbufに四角を描画〜
BitBlt(hdc, posx, posy, width, height, hdc_bkbuf, 0, 0, SRCCOPY);
SelectObject(hdc_bkbuf, hbmp_old);
DeleteObject(hbmp);
DeleteDC(hdc_bkbuf);
0321デフォルトの名無しさん
2006/11/24(金) 02:33:51SendMessageじゃなくPostするとか
0322デフォルトの名無しさん
2006/11/24(金) 02:35:20SwapBuffersはどこ行った?
0323318
2006/11/24(金) 02:44:33draw(); // OpenGLの描画関数
SwapBuffers(wglGetCurrentDC());
HDC hdc = BeginPaint(hwnd, &ps);
〜320のコード〜
EndPaint(hwnd, &ps);
SwapBuffers(hdc);
てな具合です。
>>321
すみません。いまいちよく分かりませんでした。
0324デフォルトの名無しさん
2006/11/24(金) 02:53:47OpenGLの裏画面ってGDIじゃ描画できないんだっけ?
0325318
2006/11/24(金) 03:00:17> OpenGLの裏画面ってGDIじゃ描画できないんだっけ?
GLとGDIでコンテキストを分けてそれぞれ独立に描画できれば
自由度があって便利なんですが、やり方がよくわからず。
0326321
2006/11/24(金) 03:00:32・・・
WM_PAINを発行
を
case WM_MOUSEMOVE
if(ドラッグの最中){
PostMessage(自分,WM_PAINT・・・)
}
な具合。
0327デフォルトの名無しさん
2006/11/24(金) 03:06:060328318
2006/11/24(金) 03:11:08InvalidateRectでいいですよね。
>>326
それだとドラッグの最中に四角が描画されて、
同時にタイマーでアニメーションが描画されて、結局チラついちゃう気が…。
GL側で全部描こうかなぁ。
半透明とか楽だし…。
0329デフォルトの名無しさん
2006/11/24(金) 04:24:41GDIで書く方法が不明ならそれが一番いいかと。
0330デフォルトの名無しさん
2006/11/24(金) 06:39:42WM_PAINTはあくまで再描画するためのイベントだ
それ以外の描画は他タイミングで描け
つか、タイマー使ってんならWM_TIMERで描きゃいいじゃないかよ
0331デフォルトの名無しさん
2006/11/24(金) 09:25:430332298
2006/11/24(金) 15:23:540333デフォルトの名無しさん
2006/11/24(金) 15:40:370334デフォルトの名無しさん
2006/11/24(金) 16:56:55InvalidateRect(hWnd, NULL, TRUE);ってやってるからじゃないかな
最後FALSEでやっていろいろ調整するといいかも
その前にマウスドラッグで四角書くのにタイマー使う必要があるのかが謎だけど
0335デフォルトの名無しさん
2006/11/24(金) 17:59:40LoadLibraryEx()でDLLのインスタンスハンドル入手した後
どうやって解放すればいいですか?
どなたかお願いします。
0336デフォルトの名無しさん
2006/11/24(金) 18:04:39ハンドルというかただのアドレスだ。開放する必要はない。
DLLの開放という意味ならMSDNを見れ
0337デフォルトの名無しさん
2006/11/24(金) 18:39:04OpenGL のレンダーターゲットを BMPイメージonメモリDC にして そっちを GDI 描画
WM_PAINT はBMPを(BitBlt で)可視化 で多少融通が利くよ
0338デフォルトの名無しさん
2006/11/24(金) 18:48:460339デフォルトの名無しさん
2006/11/24(金) 19:21:01JavaのWindowListenerみたいな感じのが欲しいんだけど・・
0340デフォルトの名無しさん
2006/11/24(金) 19:25:17他人が作ったライブラリを中途半端に使うより、自分で必要な機能を盛り込んで作った方がいいけどな
0341デフォルトの名無しさん
2006/11/24(金) 19:26:510342デフォルトの名無しさん
2006/11/24(金) 19:28:36個人的に好みじゃないんだよな・・
適当に作ってみるか。レスありがとう。
0343デフォルトの名無しさん
2006/11/24(金) 19:36:55(すなわち自分のプロセス内で)実行する方法って
ありますでしょうか?
0344デフォルトの名無しさん
2006/11/24(金) 19:40:36バッチファイルを実行するコードを全部自分で書く。
0345デフォルトの名無しさん
2006/11/24(金) 20:07:33バッチの中に書いてあるコマンドも内蔵させる必要があるのかだな。
あるいは単にコンソールウインドウを不可視にしたいだけのかな?
0346デフォルトの名無しさん
2006/11/24(金) 21:42:42.NET FrameworkのWindows Forms。
あとMS発祥といえばATL/WTL。こっちはマクロ使うけど。
0347デフォルトの名無しさん
2006/11/24(金) 22:25:520348343
2006/11/24(金) 22:53:39WM_QUERYENDSESSION?かなにかが飛んできたときはもう
新規実行はできないと思うので、自分でやりたいのです。
0349デフォルトの名無しさん
2006/11/24(金) 23:20:05>>344
新プロセス起動できないんなら、外部コマンドも取り込まないとな。
0350tsurarete yarou.
2006/11/24(金) 23:42:25OS は何?
すれ違いだけど、Windows 2000/XP/Server 2003 なら
http://q.hatena.ne.jp/1140862112
が参考になるかも。
0351デフォルトの名無しさん
2006/11/24(金) 23:42:44直接の答えではないけれど、ログオフスクリプトではだめか?
0352デフォルトの名無しさん
2006/11/24(金) 23:57:23mem_hdc = CreateCompatibleDC(hdc);
SelectObject(mem_hdc, mem_bmp);
int a = GetDeviceCaps(mem_hdc, HORZRES);
int b = GetDeviceCaps(mem_hdc, VERTRES);
aとbの値が800にならないんだけどなんでだろう
0353デフォルトの名無しさん
2006/11/25(土) 00:07:560354デフォルトの名無しさん
2006/11/25(土) 00:08:29言われたので来ました。
ttp://support.microsoft.com/kb/403844/ja
PGが起動してるときだけスクリーンセーバが動かないPGを作ってるんだけど
リンク先のやり方だとパスワード保護されてるとうまく動かないんです
パスワード保護の時って発行されてるメッセージって違うみたいですが
どうすればフック出来るか知りたいんですが
0356デフォルトの名無しさん
2006/11/25(土) 00:10:16解像度が800x800のディスプレイを接続すればいいと思うよ。
0357デフォルトの名無しさん
2006/11/25(土) 00:24:15対象がビットマップじゃなくてデバイス(スクリーン)だから
0359デフォルトの名無しさん
2006/11/25(土) 00:42:04GetObject
0360デフォルトの名無しさん
2006/11/25(土) 00:47:37WlxIsLockOk
0361352
2006/11/25(土) 00:47:37GetBitmapDimensionEx(mem_bmp, &sz);
でいけた
0362デフォルトの名無しさん
2006/11/25(土) 01:01:110363352
2006/11/25(土) 01:18:04あらかじめSetBitmapDimensionExでサイズを設定しておかなきゃいけないらしい
なんで初めだけ取得できたんだろ・・・?
0364デフォルトの名無しさん
2006/11/25(土) 05:00:540365デフォルトの名無しさん
2006/11/25(土) 09:27:29それで得られるサイズの単位はピクセルじゃないぞ
0366デフォルトの名無しさん
2006/11/25(土) 09:31:380367デフォルトの名無しさん
2006/11/25(土) 09:59:120368デフォルトの名無しさん
2006/11/25(土) 10:02:37COMスレで聞くべきか迷ったのですが…
FrapsやGameCamなどのDirectX乗っ取り型のキャプチャソフトなんですが
どうもキャプチャ動画を見たところDirect3Dのフロントバッファ(かバックバッファ)を
直接取得して録画してるみたいなんですが、どうやって取得しているのかその挙動が良く分かりません。
最初はSetWindowsHookEx()で全プロセスにdllをマッピングして、PEヘッダを見て
Direct3Dの初期化関数(Direct3DCreate8()等)を見つけたらフックして、
出てきたインターフェース(IDirect3DDevice8等)のGetFrontBufferData()を呼び出して
フロントバッファをコピーしているのかと思ったのですが、PEヘッダが暗号化されて
INTにDirect3DCreate8等が存在しないゲーム(具体的にはMaster of Epicというゲームです)でも
ちゃんと録画が可能な上に、この方法だとゲーム起動前にキャプチャプログラムを
起動しないといけない(Direct3DCreateをゲームが呼び出す前にフックしないといけない)ので
ゲーム起動後に起動してもちゃんと動作するFraps等では違った技法を使ってると思うのですが、
その方法がどうしても思い浮かびません。漠然とですがもしかしてIDirect3DDeviceには
メモリ検索で探せるような特定のメモリパターンがあるのかな?と思ったりするのですが…
ご存知の方いらっしゃいましたら是非ご教授お願いしたいです。
しかし…見返してみると…長文杉でホント申し訳ないorz
0369デフォルトの名無しさん
2006/11/25(土) 10:15:20CLSID乗っ取って、アプリとDirectXの間に一枚噛ませてるんじゃね?
0370デフォルトの名無しさん
2006/11/25(土) 11:10:56�dクス
0371デフォルトの名無しさん
2006/11/25(土) 11:13:18逆に自ウィンドウからD&Dして(Spy++のファインダツールのように)エクスプローラを指定→
フォルダパスを取得する方法はどのようにすればいいですか?
アドレスバーから取得する方法を試してみたのですが、
非表示の環境の場合に取得できないのでうまくいきませんでした。
CabinetWClass
-WorkerW
-RrBarWindow32
-ComboBoxEx32
-ComboBox
-Edit ←ここにWM_GETTEXTを投げてみました
0372デフォルトの名無しさん
2006/11/25(土) 12:12:13無理じゃね?
DnDのファイルコピーとかのオペレーションは受けとり側が操作するから。
ターゲットソースは受け取り側にファイル名渡すだけ。
0373デフォルトの名無しさん
2006/11/25(土) 13:00:10例えばダイアログをリサイズしたときに、
どういうイベントがどういう順番で飛ばされるのか、などを知りたいのだけど
0375デフォルトの名無しさん
2006/11/25(土) 13:07:11つ[Spy++]
0376デフォルトの名無しさん
2006/11/25(土) 13:08:45MSDN
>Size and Position Messages
ttp://msdn.microsoft.com/library/en-us/winui/winui/windowsuserinterface/windowing/windows/windowfeatures.asp
0377デフォルトの名無しさん
2006/11/25(土) 14:27:21全く同じことしようとしている人がいて驚愕>MoE
0378デフォルトの名無しさん
2006/11/25(土) 16:02:34>cl test.c user32.lib gdi32.lib
みたいに*.libっていうファイルをリンクしないとエラーが出るんですが、
これって静的リンクになっちゃってるってことですか?
0379デフォルトの名無しさん
2006/11/25(土) 16:48:20静的ライブラリがリンクされているわけではない。
0380デフォルトの名無しさん
2006/11/25(土) 17:17:15なるほどそうなんですか。
.libファイルをインポートライブラリ・スタティックリンクライブラリと
見分ける方法でもあるのかな??
0381デフォルトの名無しさん
2006/11/25(土) 17:43:15dumpbinでどうよ?詳しく使った事無いけど。
0382デフォルトの名無しさん
2006/11/25(土) 17:55:000383デフォルトの名無しさん
2006/11/25(土) 18:55:14dumpbinは有料のVS買わないと付いてこないみたいですね。
.libの中でも、
インポートライブラリというのはシンボルテーブルだけのオブジェクトファイルのアーカイブ
静的リンク用ライブラリは実コードも入ったオブジェクトファイルのアーカイブ
ってことで、arなんかのツールでファイル取り出してobjdumpして確認するのがいいみたいですね。
0384デフォルトの名無しさん
2006/11/25(土) 18:56:19自分からメモリデバイスコンテキストを使うことはできる?
フックと併せて作ったんだけどローカルではできてもグローバルでは失敗する・・・
0385デフォルトの名無しさん
2006/11/25(土) 19:45:420386デフォルトの名無しさん
2006/11/25(土) 20:18:16なるほど。SendMessageで自分のウィンドウで処理した方が良さそうだな・・・
0387デフォルトの名無しさん
2006/11/25(土) 20:44:20http://www.geocities.com/SiliconValley/4942/cabmsgs.html
このページをShellGetPathで検索
0388デフォルトの名無しさん
2006/11/25(土) 21:33:50サンクス
0389デフォルトの名無しさん
2006/11/26(日) 01:10:58参考にしているソースに"CCFree"って関数がでてきたんです。
これはなんでしょう?
http://bcbjournal.com/free_issue/June03-01.htm
のコードの一部です
// global PIDL, use CCFree()
ITEMIDLIST* pidl = static_cast<ITEMIDLIST*>(hMem);
if (pidl != NULL)
{
ITEMIDLIST* pidlcopy = shutils::ILClone(pidl);
shutils::CCFree(pidl);
return pidlcopy;
}
相当するWin32APIとかマネージAPIとかありましたら教えてください
0390デフォルトの名無しさん
2006/11/26(日) 01:20:290391デフォルトの名無しさん
2006/11/26(日) 02:19:21もう売ってない
どうすればいいの?
0392デフォルトの名無しさん
2006/11/26(日) 02:21:340393デフォルトの名無しさん
2006/11/26(日) 02:21:420394デフォルトの名無しさん
2006/11/26(日) 03:14:06メモリにロードされたあとにも暗号化されてるのか?
0395名無しさん
2006/11/26(日) 03:50:46現在、WindowsXP Pro+ VS2005 Proを使って開発中です。
1を入力されるとIMEがONになって、'あ' と表示するプログラムの作成中です。
以下のコードではIMEがONになってくれなくて、'a' と表示されます。
ご指摘お願いします。
void fnConvert(MSG *pMsg)
{
static int iCnt= 1;
if( (pMsg->wParam == 0x31) && (pMsg->message == WM_KEYDOWN) )
{
pMsg->wParam= 0x41;
break;
}
}
0396デフォルトの名無しさん
2006/11/26(日) 03:54:31IMEをオンにするコードはどこにあるんだよ
0397395
2006/11/26(日) 04:06:23>>396さん
IMEをONにするコードがわからないのですが、、、
ご教授尾根がいします。
0398デフォルトの名無しさん
2006/11/26(日) 04:12:22MessageBox(NULL, "IMEをONにしてください", "", MB_OK);
if(MessageBox(NULL, "IMEをONにしましたか?", "", MB_YESNO | MB_ICONQUESTION) == IDYES) {
break;
}
}
0399デフォルトの名無しさん
2006/11/26(日) 04:14:58というか最初からそれを聞けよwwwwww
IMEの操作なら>>4の猫でもわかるをみとけ
ImmSetOpenStatus
■ このスレッドは過去ログ倉庫に格納されています