Win32API質問箱 Build43
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2006/05/19(金) 11:25:09やさしいお兄さんやお姉さんたちが答えてくれるかも。
過去スレ、関連リンクは>>2-5くらい。
■注意
・質問する前にMSDNライブラリやPlatformSDK、Google等で検索しましょう。
・日本語版MSDN Online Libraryは不完全です。英語版(http://msdn.microsoft.com)の利用推奨。
・APIフックなど高度な事をしたい場合はできるだけAdvencedWindowsを読みましょう。
・言語特有の問題やIDE、MFCやVCLなどの質問はそれぞれの言語や開発環境スレで。
0002デフォルトの名無しさん
2006/05/19(金) 11:25:4342 ttp://pc8.2ch.net/test/read.cgi/tech/1144962549/
41 ttp://pc8.2ch.net/test/read.cgi/tech/1141392216/
40 ttp://pc8.2ch.net/test/read.cgi/tech/1138893959/
39 ttp://pc8.2ch.net/test/read.cgi/tech/1136673250/
38 ttp://pc8.2ch.net/test/read.cgi/tech/1133798345/
37 ttp://pc8.2ch.net/test/read.cgi/tech/1131884991/
36 ttp://pc8.2ch.net/test/read.cgi/tech/1128951330/
35 ttp://pc8.2ch.net/test/read.cgi/tech/1125850096/
34 ttp://pc8.2ch.net/test/read.cgi/tech/1122723009/
33 ttp://pc8.2ch.net/test/read.cgi/tech/1120153520/
0003デフォルトの名無しさん
2006/05/19(金) 11:28:0031 ttp://pc8.2ch.net/test/read.cgi/tech/1114762194/
30 ttp://pc8.2ch.net/test/read.cgi/tech/1112345886/
29 ttp://pc8.2ch.net/test/read.cgi/tech/1110281860/
28 ttp://pc5.2ch.net/test/read.cgi/tech/1108199304/
27 ttp://pc5.2ch.net/test/read.cgi/tech/1106103119/
26 ttp://pc5.2ch.net/test/read.cgi/tech/1104109858/
25 ttp://pc5.2ch.net/test/read.cgi/tech/1101393155/
24 ttp://pc5.2ch.net/test/read.cgi/tech/1098967135/
23 ttp://pc5.2ch.net/test/read.cgi/tech/1095534704/
22 ttp://pc5.2ch.net/test/read.cgi/tech/1092524669/
21 ttp://pc5.2ch.net/test/read.cgi/tech/1090422324/
20 ttp://pc5.2ch.net/test/read.cgi/tech/1088140233/
19 ttp://pc5.2ch.net/test/read.cgi/tech/1084697545/
18 ttp://pc5.2ch.net/test/read.cgi/tech/1081702990/
17 ttp://pc5.2ch.net/test/read.cgi/tech/1077470361/
16 ttp://pc2.2ch.net/test/read.cgi/tech/1073830065/★
15 ttp://pc2.2ch.net/test/read.cgi/tech/1069339866/★
14 ttp://pc5.2ch.net/tech/kako/1065/10653/1065328397.html
13 ttp://pc5.2ch.net/tech/kako/1059/10595/1059549320.html
12 ttp://pc5.2ch.net/tech/kako/1056/10560/1056033645.html
11 ttp://pc5.2ch.net/tech/kako/1052/10526/1052651750.html
10 ttp://pc5.2ch.net/tech/kako/1047/10478/1047819779.html
9 ttp://pc5.2ch.net/tech/kako/1044/10449/1044929160.html
8 ttp://pc5.2ch.net/tech/kako/1040/10409/1040964626.html
7 ttp://pc3.2ch.net/tech/kako/1036/10366/1036654893.html
6 ttp://pc3.2ch.net/tech/kako/1032/10325/1032548635.html
5 ttp://pc3.2ch.net/tech/kako/1028/10285/1028580373.html
4 ttp://pc3.2ch.net/tech/kako/1023/10233/1023361418.html
3 ttp://pc.2ch.net/tech/kako/1017/10170/1017072275.html
2 ttp://pc.2ch.net/tech/kako/1006/10067/1006783012.html
1 ttp://pc.2ch.net/tech/kako/991/991576947.html
0004デフォルトの名無しさん
2006/05/19(金) 11:30:01http://www.microsoft.com/japan/msdn/
- 猫でもわかるプログラミング
http://www.kumei.ne.jp/c_lang/
- Platform SDK Update
http://www.microsoft.com/msdownload/platformsdk/sdkupdate/
http://www.google.com/
- Windows® Server 2003 SP1 Platform SDK Full Download
http://www.microsoft.com/downloads/details.aspx?familyid=EBA0128F-A770-45F1-86F3-7AB010B398A3&displaylang=en
http://www.microsoft.com/msdownload/platformsdk/sdkupdate/XPSP2FULLInstall.htm
http://www.microsoft.com/msdownload/platformsdk/sdkupdate/psdk-full.htm
- Win32 API入門
http://wisdom.sakura.ne.jp/system/winapi/
- Win32 プログラミング入門
http://www7.plala.or.jp/keny01/
- 書籍
Advanced Windows
http://www.amazon.co.jp/exec/obidos/ASIN/4756138055
-おまけ
dat落ちしている過去スレが見れるかも。Build19が見たい人、余裕のある人は●でも買ってやってくれ。
http://makimo.to/cgi-bin/search/search.cgi?q=Win32API&andor=AND&sf=2&H=&view=table&shw=&D=tech
0005デフォルトの名無しさん
2006/05/19(金) 11:32:19http://pc8.2ch.net/test/read.cgi/gamedev/1016699230/
HSPでRPG
http://pc8.2ch.net/test/read.cgi/gamedev/1082902759/
HSPで出来る範囲について
http://pc8.2ch.net/test/read.cgi/gamedev/1085733089/
HSP - Hot Soup Processor [11]
http://pc8.2ch.net/test/read.cgi/gamedev/1133488968/
HSPでの麻雀プログラムについて
http://pc8.2ch.net/test/read.cgi/gamedev/1047707655/
HSPは・・・
http://pc8.2ch.net/test/read.cgi/gamedev/1104208959/
おまいらHSPで適当なゲームでもつくりませんか
http://pc8.2ch.net/test/read.cgi/gamedev/1102214621/
★ゲーム製作期待の星! HSP Part 9 ★
http://pc8.2ch.net/test/read.cgi/gamedev/1005313791/
HSPで完全オリのSLGを作るスレ
http://pc8.2ch.net/test/read.cgi/gamedev/1047478458/
HSPでSLGが作れるようになるまで頑張るスレ
http://pc8.2ch.net/test/read.cgi/gamedev/1103618349/
HSPでモンスター育成SLGを作りましょう!
http://pc8.2ch.net/test/read.cgi/gamedev/1089467139/
ネットゲームforHSP『無人島』制作スレ
http://pc8.2ch.net/test/read.cgi/gamedev/1018534410/
PGの面接で、使える言語はHSPですって言ったら
http://pc8.2ch.net/test/read.cgi/gamedev/1046921466/
HSPでシミュレーションRPG
http://pc8.2ch.net/test/read.cgi/gamedev/1036923414/
0006デフォルトの名無しさん
2006/05/19(金) 13:56:51乙
0007デフォルトの名無しさん
2006/05/19(金) 15:14:310008デフォルトの名無しさん
2006/05/19(金) 16:25:320009デフォルトの名無しさん
2006/05/19(金) 16:31:350010デフォルトの名無しさん
2006/05/19(金) 16:43:270011デフォルトの名無しさん
2006/05/19(金) 17:03:230012デフォルトの名無しさん
2006/05/19(金) 17:19:140013デフォルトの名無しさん
2006/05/19(金) 17:30:410014デフォルトの名無しさん
2006/05/19(金) 17:36:30ほんものならシャツいらんやんヾ(^^ヘ)
0015デフォルトの名無しさん
2006/05/19(金) 17:57:480016デフォルトの名無しさん
2006/05/19(金) 18:02:050017デフォルトの名無しさん
2006/05/19(金) 19:20:320018デフォルトの名無しさん
2006/05/19(金) 21:11:500019sage
2006/05/20(土) 02:43:23参考になるサイト(もしくは書籍?)などありませんでしょうか。
ACPIというものを使うようですが探してもプログラミングについて
サンプルとか情報みつまりませんでしたorz
#WinAPIでは無いきもします・・・スレ違いでしたらゴメンナサイ
0020デフォルトの名無しさん
2006/05/20(土) 02:44:370021デフォルトの名無しさん
2006/05/20(土) 02:59:16こんなのがあったけど。
Turn on/off monitor
http://www.codeproject.com/system/display_states.asp
0022デフォルトの名無しさん
2006/05/20(土) 03:04:19BUTTONウィンドウの背景色を
灰色じゃない色(例えば、赤)に変えるにはどうしたらいいのでしょうか?
0023デフォルトの名無しさん
2006/05/20(土) 03:25:17吹き出しみたいなメッセージが、タスクバーのアイコンから出るのがありますが
あれを出す関数は何か教えてください。お願いします。
0024デフォルトの名無しさん
2006/05/20(土) 04:31:46イメージ保持数が0になっていて上手く取得できていないようです。
HWND hSysWnd;
hSysWnd = ::FindWindowEx( NULL, 0, "Progman", "Program Manager" );
hSysWnd = ::FindWindowEx( hSysWnd, 0, "SHELLDLL_DefView", NULL );
hSysWnd = ::FindWindowEx( hSysWnd, 0, "SysListView32", NULL );
HIMAGELIST hImgList = ListView_GetImageList( hSysWnd, LVSIL_NORMAL );
int nImg = ImageList_GetImageCount( hImgList );
for( int i=0 ; i<nImg ; i++ )
{
ImageList_Draw( hImgList, i, hdc, 0, i*48, ILD_NORMAL );
}
hImgListにNULLは返ってきてないのでエラーではないみたいなのですが、何が原因なのでしょうか。
0025デフォルトの名無しさん
2006/05/20(土) 05:58:50コードを書き始めて、単に新規のデータをどこかに挿入したり、最後尾にくっつけたりするだけでは全く実現できないことに気付きました。
複雑な参照関係にあるデータが、インデックス番号ではなくオフセットアドレスを使って参照し合っているからです。
どこかにデータを挿入した場合は、すべてのオフセットアドレスを再構成しなければなりません。
そこで、リソースデータを、追加部分を含めた形で、新たに一から書き出す、という事を考えたのですが、これがかなり大変そうです。
ファイルポインタを激しく動かさなければならないのです。
ツリー部から、ID文字列領域から、リソース本体領域へと激しくジャンプしなければなりません。
その際にまだ書き込んでいないデータのサイズを正確に予測してきちんとファイルポインタ位置を決定しなければなりません。これはかなり複雑な状況ではないか、と思いました。
そこでちょっと考えてみました。
オフセットデータだけが問題であるならば、
ツリー部分にストアされているすべてのオフセットデータ値に対し、
1. データ挿入がなされる位置より前であるなら変更しない
2. データ挿入がなされる位置より後ろなら変更する
という方法でごく簡単にリソースデータを再構築できるのではないか、と。
挿入すべきデータはツリーの構成員の構造体だけで、ID文字列やリソース本体は最後尾にくっつけるだけでよさそうです。
こういう方法でやった人は誰かいるでしょうか? そしてうまくいったでしょうか?
0026デフォルトの名無しさん
2006/05/20(土) 08:58:27>ファイルポインタを激しく動かさなければならないのです。
一旦メモリ上にファイルの最終イメージを完成させてからファイルに書くか、
CreateFileMapping()使えば?
0027デフォルトの名無しさん
2006/05/20(土) 09:47:560028デフォルトの名無しさん
2006/05/20(土) 13:12:01EnumChildWindowsで調べるものをつくってもいいのですが、
思い出せないものが本当にあったのかどうかわからないので教えてもらえないでしょうか?
0029デフォルトの名無しさん
2006/05/20(土) 13:25:180031デフォルトの名無しさん
2006/05/20(土) 13:47:22なかったですか。
つまり自分の勘違だったんですね。
0032デフォルトの名無しさん
2006/05/20(土) 16:19:51枠やキャプションも含めたサイズですか??
003332
2006/05/20(土) 16:22:14キャプションや枠のサイズはどうすれば取得できますか?
0034デフォルトの名無しさん
2006/05/20(土) 16:48:180035デフォルトの名無しさん
2006/05/20(土) 17:54:01Dとかでも質問可だったりしますか。
0036デフォルトの名無しさん
2006/05/20(土) 18:03:540037デフォルトの名無しさん
2006/05/20(土) 18:26:25UpdateResource
EndUpdateResource
あたりは?NT系だけだが
0038デフォルトの名無しさん
2006/05/20(土) 18:27:03>>25ね
0039デフォルトの名無しさん
2006/05/20(土) 18:55:580040デフォルトの名無しさん
2006/05/20(土) 18:57:170041デフォルトの名無しさん
2006/05/20(土) 19:02:210042デフォルトの名無しさん
2006/05/20(土) 19:35:05関数とか教えてもらえませんか?
0043デフォルトの名無しさん
2006/05/20(土) 19:51:12それでコンパイルしたとき「そんな関数ないです」とコンパイラに言われました。
wsscanfじゃなかったらなんになるのさ??
0044デフォルトの名無しさん
2006/05/20(土) 20:08:01Win32APIには無い。
0045デフォルトの名無しさん
2006/05/20(土) 20:11:49char szBuf[64];
wsprintf(szBuf, "差し手 = %s", szSashite);
これはいいのか?
0046デフォルトの名無しさん
2006/05/20(土) 20:12:580047デフォルトの名無しさん
2006/05/20(土) 20:50:330048デフォルトの名無しさん
2006/05/20(土) 20:53:02無いつってんだろp”
0049デフォルトの名無しさん
2006/05/20(土) 21:01:09勘違いしていました。
0050デフォルトの名無しさん
2006/05/20(土) 21:19:24青くなるようにするにはどうしたらいいのでしょうか?
0051デフォルトの名無しさん
2006/05/20(土) 21:34:30`ヽ:: ::´
ヽ ヽ , -‐--、 / /
ヽ \ I:::::::I_ _ / /
ヽ ヽ i,(;;;ノI、;;;)l ,,/ , '
ヽ ` ー 、.,,ゝ´ヮ`,ノュ_, - ' r'
フォ━━━━` 、_ /::: `山'::::: /━━━━!!! カス
ヽ:::::::::::|::::::::"",r‐'
〉::::::::|::::::::::¨/
/;;;;;;;/;;;;;;;;;;/
/;;;;;;;/:::::::::::《
<;;;;;;;《:::::::::::::ヽ
/ ヽI,r''"""^~ヽ
/ ,/ ヽ ヽ
0052デフォルトの名無しさん
2006/05/20(土) 21:56:40windows操作してりゃ分からねぇ?
0053デフォルトの名無しさん
2006/05/20(土) 22:00:53CRTの_tscanfで問題あるのか?
0054デフォルトの名無しさん
2006/05/20(土) 22:04:24余計わからなくなっちゃったじゃないかァ!
http://kureyon.jp/blog/srhkmk/img/1128259481.jpg
http://ja.wikipedia.org/wiki/%E4%BD%8F%E8%B0%B7%E6%AD%A3%E6%A8%B9
0055デフォルトの名無しさん
2006/05/20(土) 22:04:54GetSystemMenu
0056デフォルトの名無しさん
2006/05/21(日) 14:44:24その時、ウィンドウAを上にするにはどうしたらいいのでしょうか?
ShowWindow以外でなにかあれば教えてください。
ウィンドウAとウィンドウBの親ウィンドウは同じです。
0057デフォルトの名無しさん
2006/05/21(日) 14:54:520058デフォルトの名無しさん
2006/05/21(日) 14:54:59ていうか何故以外?
0059デフォルトの名無しさん
2006/05/21(日) 15:08:29だけどそのウィンドウが途中からウィンドウの順序が逆になりそうな気がしたのです。
ありがとうございますです。
0060デフォルトの名無しさん
2006/05/21(日) 16:23:16それって何処が変なの?
0061デフォルトの名無しさん
2006/05/21(日) 17:32:29UNICODEでコンパイルすると
TCHARがwchar_tになる。
つまり、
wsprintf(wchar_t *, const wchar_t *, ...);
ということになる。
wchar_t *のところに、char szBuf[64]をいれたら
コンパイルエラーが出る。
といいたいいんだろ?
0062デフォルトの名無しさん
2006/05/21(日) 18:25:06Windowの何の順がだ?
って言うか、試してみてダメだった時に考えろや。
0063デフォルトの名無しさん
2006/05/21(日) 18:38:280064デフォルトの名無しさん
2006/05/22(月) 01:14:14TB_GETSTATEはIDからしか無理みたいですし・・・
だからといってIndexからIDを調べる方法もわからないし・・・
TB_COMMANDTOINDEXは逆だし・・・
調べてみたのですがさっぱりわかりません。
教えてもらえないでしょうか?
0065デフォルトの名無しさん
2006/05/22(月) 01:26:56TB_GETBUTTONでindexからIDを調べる
0066デフォルトの名無しさん
2006/05/22(月) 01:41:47ちゃんと出てる!
ありがとうございます!
でもやっぱしID調べてからだったのですか・・・
処理回数増えるけど仕方ないか・・・
0067デフォルトの名無しさん
2006/05/22(月) 05:05:34大きいバッファを用意し、その中に全ての文字列を格納して
SetDlgItemTextで一度に表示する方法しかないんでしょうか?
行単位で送り出せればいいんですが。
0068デフォルトの名無しさん
2006/05/22(月) 05:09:580069デフォルトの名無しさん
2006/05/22(月) 05:17:43なるほど。EM系のメッセージ調べれば良かったんですね。
どうもありがとうございました。
0070デフォルトの名無しさん
2006/05/22(月) 05:46:420071デフォルトの名無しさん
2006/05/22(月) 09:06:230072デフォルトの名無しさん
2006/05/22(月) 09:26:26win95はSetWindowTextだったのが
それ以降はエディットコントロールのメモリへ直接セットしてますね
おそらくそれが一番高速でしょう
0073デフォルトの名無しさん
2006/05/22(月) 09:59:12このエラーメッセージは何ですか?
コンパイルは出来たのですが、リンク時にこのメッセージが出てエラーになります
0074デフォルトの名無しさん
2006/05/22(月) 10:09:300075デフォルトの名無しさん
2006/05/22(月) 10:13:590076デフォルトの名無しさん
2006/05/22(月) 16:14:08メニュー選択で
case IDM_AAA:
OnCreate(hWnd); //スレッドを作ってダイアログボックスを呼び出す関数
TESTMAIN( ); //計算する関数(時間がかかる)
////////
void OnCreate(HWND hWnd)
{
DWORD ThreadID;
ZeroMemory(&myThread, sizeof(THREAD));
myThread.hThread = CreateThread(NULL, 0,
(LPTHREAD_START_ROUTINE)ThreadProc,
(LPVOID)hWnd, 0, &ThreadID);
if(myThread.hThread == NULL){
MessageBox(hWnd, "スレッドの作成に失敗しました",
"スレッド作成", MB_OK | MB_ICONERROR);
SetDlgItemText(hWnd, IDC_EDIT4, "失敗");
return;
}
myThread.bValid = TRUE;
}
DWORD WINAPI ThreadProc(HWND hWnd)
{
DialogBox(hInst, (LPCTSTR)IDD_joukyou, hWnd, (DLGPROC)joukyou);
return 0;
}
として、計算している最中にダイアログボックスを表示させたいのですが、
TESTMAIN( )が終わらないとダイアログボックスを表示してくれません。
スレッドを作っているのになぜでしょう?
長くてすいません。
0077デフォルトの名無しさん
2006/05/22(月) 18:22:51計算をしている最中にダイアログを出したいなら、
計算を別スレッドでやれよ。
0078デフォルトの名無しさん
2006/05/22(月) 18:52:450080デフォルトの名無しさん
2006/05/22(月) 19:10:24WaitForSingleObject系などを使って判定。
なお、キャンセルを受け付けるならWaitForMultipleObjectsがいいかもね。
0081デフォルトの名無しさん
2006/05/22(月) 19:28:10おま、決定的な勘違いしてんぞ?なんだ「そんなもん」て?
別スレッドでやってんのはダイアログ作る関数呼び出してるだけで
メインスレッドでその作ったダイアログ表示するためのメッセージ処理してないんだろ?
そりゃ表示されるわけねーじゃんよん。もう全体的にダメぽ。
あと別スレッドで計算させたってウィンドウの操作無効にする方法はくらでもあんだろ?
0082デフォルトの名無しさん
2006/05/22(月) 20:33:58メッセージループが回らなきゃ、描画も移動も入力も、何にも回らんよ。
0083デフォルトの名無しさん
2006/05/22(月) 20:57:10Cの初心者スレできちんと勉強した方がいいよ。
0084デフォルトの名無しさん
2006/05/22(月) 21:02:22�@.スレッドを操作するクラスを作る。
�A.スレッド生存判定するメソを作る。WaitForSingleObject(m_hThread, 0)を使って判定。
�B.�@を扱いやすいとこで宣言。とりあえずグローバルで。
�C.メニューの選択処理で、�Aのメソでスレッドの生存判定。
�D.�Cでスレッドが生きてなかったら、スレッドを生成し処理を走らせる。
まずは、こんなかんぢで?
んで、好きなように工夫してみれあ?
0085デフォルトの名無しさん
2006/05/22(月) 21:14:300086デフォルトの名無しさん
2006/05/22(月) 21:25:100087デフォルトの名無しさん
2006/05/22(月) 21:30:41計算中にWindow触って欲しくなかったら、ダイアログ出す必要ないじゃん。
計算中にダイアログを出したいなら、メッセージループを回さなければならない。
メッセージループが回らないと、ダイアログを表示することすら出来ない。
君はWindowsの基本から勉強した方がいい。
0088デフォルトの名無しさん
2006/05/22(月) 21:45:19メッセージループ(GetMessage)を独自に回し、
ダイアログ用ウィンドウプロシージャを呼び出しています。
0089デフォルトの名無しさん
2006/05/22(月) 22:00:04アプリケーション側で解放したりするのはマズイですよね?
今のところ動いてるんですが、例えばDLL側でリンクしているcrtと
アプリ側でリンクしているcrtが違ったりするとマズーな予感がするんですが
0090デフォルトの名無しさん
2006/05/22(月) 22:09:10newだのmallocを使うならマズイ。
Win32API使うならダイジョブ?
0091デフォルトの名無しさん
2006/05/22(月) 22:33:060092デフォルトの名無しさん
2006/05/22(月) 22:35:27>>91
ありがとうございます
Win32APIを使用する事にします
0093デフォルトの名無しさん
2006/05/22(月) 22:52:560094デフォルトの名無しさん
2006/05/22(月) 23:27:37>別スレッドでやってんのはダイアログ作る関数呼び出してるだけで
>メインスレッドでその作ったダイアログ表示するためのメッセージ処理してないんだろ
も前様もナニか勘違いしていると思われます。
ウィンドウメッセージは、ウィンドウを作ったスレッドのメッセージキューに
送られますよ。
79の問題は、「ウィンドウ触られたくないから」って言ってメインスレッドのメッセージ処理を止めてしまっている点。
ワーカスレッドはダイアログを表示してメインスレッドのウィンドウを非アクティブにするべく
WM_NCACTIVEメッセージをメインスレッドのウィンドウに送り、それの返事をずっと待っている。
0095デフォルトの名無しさん
2006/05/23(火) 00:23:38IEのフレームに代表されるような「つまんで領域の大きさを左右や上下に調整する」区切り線は、
ウインドウスタイルの中で指定できないのでしょうか?
(正直、どういうメッセージが飛んでくるのかいまいち想像つきませんが)
用意されている可能性がある程度には、一般的かなと思うのですが…。
0096デフォルトの名無しさん
2006/05/23(火) 00:26:28スピリッタの事かな?
0097デフォルトの名無しさん
2006/05/23(火) 00:27:410098デフォルトの名無しさん
2006/05/23(火) 00:34:38でもこれMFCなんですね。Win32APIオンリーだと自力実装になりそうですね。
0099デフォルトの名無しさん
2006/05/23(火) 00:36:55951〜
0100デフォルトの名無しさん
2006/05/23(火) 00:42:37WTLにもあるよ。
0101デフォルトの名無しさん
2006/05/23(火) 00:48:18ご丁寧にありがとうございます。
以前から何回か質問させていただいてますが、いつも丁寧な返答が帰ってきて嬉しい限りです。
まだペーペーですが、質問に応えられる側になるようがんばります。
0102デフォルトの名無しさん
2006/05/23(火) 09:41:47VCLにもあるよ。
ローカルフックでWindowsキーの入力を検知、シェル側で反応しないようにしたいのですが無理でしょうか?
WH_KEYBOARDで入力は取れるもの0返そうがスタートメニューが反応してしまいますorz
グローバルフックでファンクションキーは殺せたんですが‥‥
0103デフォルトの名無しさん
2006/05/23(火) 10:05:42もうちょいくやしく
0104デフォルトの名無しさん
2006/05/23(火) 10:20:240105デフォルトの名無しさん
2006/05/23(火) 11:54:57ユーザーのwindowsの設定を取得したい時ってよくあると思うんですけど、
基本的には、レジストリから読み込めばいいんですかね?
それとも、専用の関数がある場合はなるべく、レジストリ系の関数は使わない方がいいんですか?
0106102
2006/05/23(火) 11:59:04RegisterHotKeyで設定するホットキーの設定用に押したキーの組み合わせを取得したいのですがWindowsキーが問答無用でスタートメニュー開いてくれるので。
アクティブなコントロール上でWindowsキーが押された場合にスタートメニューを開かせないようにしたいのですが。
>>104
ローカルフックでどうやったらそんな物が作れるのか詳しく。
0107デフォルトの名無しさん
2006/05/23(火) 12:07:18設定による
0108105
2006/05/23(火) 12:17:20レスどうもです。質問の仕方がちょっと悪かったと思うので変えます
1.書き込みはせずに読み込みだけする場合でも、レジストリにアクセスする事は危険で、なるべく避けた方が良い行為ですか?
2.専用の関数がある場合はなるべく、レジストリ系の関数は使わないようにした方がいいですか?
0109デフォルトの名無しさん
2006/05/23(火) 12:40:571.必要があるなら使う、そうでなければ使わない
2.うん
Windowsのバージョンによって、格納されているエントリが異なることもある
専用の関数はそれらの差異を吸収している場合が多い
0111デフォルトの名無しさん
2006/05/23(火) 14:54:00WH_LLKEYBOARD のフックプロシージャで TRUE 返せばキーは無効になると思うよ。
これのフックプロシージャは(他プロセスに進入する他のグローバルフックとは異なり)、
SetWindowsHookEx を読んだプロセス(スレッド)のメッセージポンプ経由で呼ばれるので注意。
EXE に普通に書けてラクだけど。
0112デフォルトの名無しさん
2006/05/23(火) 15:35:46あるウインドウの子として、
CreateWindowにて
WS_CLIPSIBLINGS | WS_CHILD | WS_VISIBLE | WS_SYSMENU | WS_THICKFRAME | WS_CAPTION | WS_MINIMIZEBOX
な子供ウインドウを作りました。
その子供同士の重なりなのですが、ウインドウの「タイトルバー」をクリックしない限り、前後が入れ替わりません。
クライアント領域であろうと(例えば)スクロールバーであろうと、どこかをクリックされたら、そいつが(子供ウインドウの中で)最前面にくるのかと思っていたのですが、これは仕様なのでしょうか?
それとも設定ミスでしょうか?
0113デフォルトの名無しさん
2006/05/23(火) 16:03:31猫などのサイトを見ているとWM_COMMANDでのButtonクリックの処理は
ButtonのIDで処理していますよね。
それで本題なんですけど、
とあるサイトでWM_COMMANDのlParamのデータを見たのですが
その中にはhwndControl(コントロールからの場合、ウィンドウハンドル(HWND)が入る)と書いていました。
ですのでHWNDを変数に入れてある場合、IDよりHWNDで判定したほうが
安全な気がするのですが(IDが被る心配がいらないとか?)
実際のところはどうなんでしょうか?
0114デフォルトの名無しさん
2006/05/23(火) 16:14:42何を問題としているのかが理解できんな。
IDとHWNDを比べてみても意味はないし。
何かをしたいが「IDでやる方法がわからない」と言う事なのか?
0115デフォルトの名無しさん
2006/05/23(火) 16:28:56これは単なる疑問で「IDでやる方法がわからない」というわけではないのです。
説明が下手だったみたいです。
ID=定数。
定数ということはプログラムが大規模になると数字が被るような気がする。
被ったら変な動きがするかもしれない?
それだったらウィンドウハンドルはひとつのプログラム内だったら被ることはまずないような・・・
とか思ったのです。
0116デフォルトの名無しさん
2006/05/23(火) 16:36:550117デフォルトの名無しさん
2006/05/23(火) 16:42:46自分で被るようにしたのはいいのですけど、
気づかないで被っていたらやばくないかなぁって思いません?
0118デフォルトの名無しさん
2006/05/23(火) 16:48:06被らない様に付けるからID(識別子)と言うのだ
0119デフォルトの名無しさん
2006/05/23(火) 16:52:550120デフォルトの名無しさん
2006/05/23(火) 16:57:10つまらない疑問だったのですね・・・
ようはうまく使い分けろってことですかね?
0121デフォルトの名無しさん
2006/05/23(火) 16:59:25HWNDで判定したければすればいい。
0122デフォルトの名無しさん
2006/05/23(火) 17:08:05コントロールのHWNDを取得できるわけだし、
コントロールのHWNDを管理する手間が減ってイイ!
と思うのだが・・・
0123デフォルトの名無しさん
2006/05/23(火) 17:10:09それに気づかなかったのか自分は・・・
0124デフォルトの名無しさん
2006/05/23(火) 17:31:10hHook = SetWindowsHookEx(WH_KEYBOARD_LL, (HOOKPROC)KeyboardProc, GetModuleHandle(NULL), 0);
で行けました。ありがとうございました。
0125デフォルトの名無しさん
2006/05/23(火) 17:49:54被るのが心配ならenum使えば勝手に連番を割り振ってくれるよ。
0126デフォルトの名無しさん
2006/05/23(火) 17:50:49移動できないようにするにはどうしたらいいのでしょうか?
最大化や閉じるなどは使えるままにしたいとおもっています。
0127デフォルトの名無しさん
2006/05/23(火) 18:02:34WM_MOVINGでlParamを固定したい位置に書き換えればいいよ。
0128デフォルトの名無しさん
2006/05/23(火) 18:03:27移動できないようにするのに最大化はしたいとは、また無体な要望をw
そうすればいいんじゃね?
0129デフォルトの名無しさん
2006/05/23(火) 18:06:22最大化や最小化も「移動」だ
0130デフォルトの名無しさん
2006/05/23(火) 18:09:27EnableMenuItem(GetSystemMenu(hWnd, FALSE), SC_MOVE, MF_BYCOMMAND | MF_GRAYED);
0131デフォルトの名無しさん
2006/05/23(火) 18:20:560132デフォルトの名無しさん
2006/05/23(火) 18:31:09EnableMenuItem()じゃ効かなかった
RemoveMenu(GetSystemMenu(hWnd, FALSE), SC_MOVE, MF_BYCOMMAND);
0133デフォルトの名無しさん
2006/05/23(火) 18:38:40何度しても無理だったのでやり方が間違っているか考えてました。
RemoveMenu(GetSystemMenu(hWnd, FALSE), SC_MOVE, MF_BYCOMMAND);は動きました!
・・・EnableMenuItemはなぜ出来ないのでしょうかね?
0134デフォルトの名無しさん
2006/05/23(火) 18:41:540135デフォルトの名無しさん
2006/05/23(火) 18:45:170136デフォルトの名無しさん
2006/05/23(火) 19:21:25わんわんわんわん わわわん わんわん
(HWNDは各々のPCのWindows毎に値が異なりますが、IDはユニーク値が付けられます。)
わんわん わわん わんわん
(メッセージやアイコンとか、別のリソースDLLでもっておけば、)
わんわんわんわん わん わわん わわん
わんわんわん わわわん クーン わんわん
(他国間で動かせるアプリケーションを作成したとき、リソースの差し替えは動的に行えますからね。)
わん!
0137デフォルトの名無しさん
2006/05/23(火) 19:56:19わんわわん
0138デフォルトの名無しさん
2006/05/23(火) 20:30:50わんわんわんんわ
0139デフォルトの名無しさん
2006/05/23(火) 20:38:51朝鮮人呼ぶぞ
0140デフォルトの名無しさん
2006/05/23(火) 21:28:110141デフォルトの名無しさん
2006/05/23(火) 21:52:520142デフォルトの名無しさん
2006/05/23(火) 22:03:47UNICODEベースだと、かなり変わってくるのでしょうか
あいまいな質問ですいません。
0143デフォルトの名無しさん
2006/05/23(火) 22:45:05きちんとUNICODE対応を念頭において作られたのならば、ソースコードに変更は生じない。
猫でもはちっともUNICODE対応を考えていない。
(しかし猫を書いた本人は現在知らないわけではなさそうだ)
0144デフォルトの名無しさん
2006/05/23(火) 22:46:26ASCIIと互換を考えるなら、
アプリケーションの実行地域(ロケール)、
あとファイル操作を気をつけなければなりませんね。
0145デフォルトの名無しさん
2006/05/23(火) 22:49:42似たような御仁がおられる。edit control を使ったものは分かりませんが、
rich edit control を使ったものは分からないことだらけ。
自分は文字を色付けしたりして使っていますが、rich edit control では
UNICODE 対応はまじめにやってないんではと思うときがあります。
ファイルの扱いやダイアログなどでの文字の扱いは問題ないです。
0146デフォルトの名無しさん
2006/05/23(火) 22:55:44どなたか>>112わかりませんでしょうか。
単純に「親ウインドウ作って、子ウインドウ2つ作って」というだけのアプリを作っても、ダメでした。
0147デフォルトの名無しさん
2006/05/23(火) 23:18:44対象アプリの入力欄のハンドルが欲しいのですが、同じクラス名が沢山あり捕まえられませんでした。
入力欄はテキストボックス?で、フォーカスが当たり入力カーソルが点滅している状態です。
これを利用して、ハンドルを取りたいのですがどうすればいいのでしょうか?
0148デフォルトの名無しさん
2006/05/23(火) 23:23:080149デフォルトの名無しさん
2006/05/24(水) 00:13:180150147
2006/05/24(水) 00:18:56ありがとうございます。
明日やってみます。
コレをヒントに何とか解決できそうです。
正直ウィンドウ情報だけでやろうとして煮詰まっていました。
初心者ゆえ、しらない概念がある事がわかって勉強になったしだいです。
0151デフォルトの名無しさん
2006/05/24(水) 01:31:45タブコントロールのタブの部分をマウスで右クリックしたらポップアップメニューが出てきて
削除を選ぶとそのタブ項目が削除されるようにしたいと思っています。
ですので、タブの右クリック取得方法(NM_RCLICK)や
タブの削除方法(TCM_DELETEITEM)は調べました。
しかし、右クリックしたタブが左から何番目かを調べる方法がわかりません。
どうやったらいいのでしょうか?
よろしくお願いします。
0152デフォルトの名無しさん
2006/05/24(水) 02:07:05TCM_HITTESTは調べた?
0153デフォルトの名無しさん
2006/05/24(水) 02:56:22case NM_RCLICK:
GetCursorPos(&(HitTest.pt));
ScreenToClient(hTabWnd,&(HitTest.pt));
SendMessage(hTabWnd, TCM_HITTEST, 0, (LPARAM)&HitTest);
wsprintf( str, TEXT("%d番目"), TCHT_NOWHERE);
MessageBox(NULL , str, TEXT("タブコントロール"),MB_OK);
break;
としたら"1番目"としか返ってきませんでした。。。
どっか間違えたみたいです。
どこだろ・・・
まぁ、明日もう一度英文見直すか〜
0154153
2006/05/24(水) 02:59:05↓
wsprintf( str, TEXT("%d番目"), HitTest.flags);
です。
戻し忘れてました。
0155153
2006/05/24(水) 03:16:15このメッセージはタブ内にマウスポインタがあるだけしかわからないような・・・
返ってくる値はTCHT_ONITEMとTCHT_ONITEMLABELだけだし・・・
う〜ん、なにか別のとセットで使うものなのですか?
0156デフォルトの名無しさん
2006/05/24(水) 03:32:250157デフォルトの名無しさん
2006/05/24(水) 09:33:390158デフォルトの名無しさん
2006/05/24(水) 10:35:220159デフォルトの名無しさん
2006/05/24(水) 10:41:230161デフォルトの名無しさん
2006/05/24(水) 13:11:39>>133 大昔の仕様です。「なぜ」に答えるのはむつかしいです
0162151,153
2006/05/24(水) 13:50:07の返り値で何番地かわかるようになりました。
ですがそのあとでポップアップメニューを出しても何番地かの情報を送ってはくれません。
ですのでこういう場合は下のように、
TrackPopupMenu(hSubMenu, TPM_LEFTALIGN | TPM_NONOTIFY | TPM_RETURNCMD, point.x, point.y, 0, NULL, NULL);
として出てきたIDと組み合わせて処理をしたらいいのでしょうか?
0163デフォルトの名無しさん
2006/05/24(水) 14:57:13試してないけど、こんな感じでどう?
case NM_RCLICK:
GetCursorPos(&(HitTest.pt));
ScreenToClient(hTabWnd, &(HitTest.pt));
PopupProc(hTabWnd, TabCtrl_HitTest(hTabWnd, &HitTest));
break;
BOOL PopupProc(HWND hTabWnd, int iItem)
{
int nID;
if (iItem == -1) {
return FALSE;
}
/* 中略 */
nID = TrackPopupMenu(hSubMenu, TPM_LEFTALIGN | TPM_NONOTIFY | TPM_RETURNCMD, point.x, point.y, 0, NULL, NULL);
switch (nID) {
case IDM_DELETE: /* 削除を選択 */
TabCtrl_DeleteItem(hTabWnd, iItem);
break;
}
return TRUE;
}
0164デフォルトの名無しさん
2006/05/24(水) 15:14:48動きました〜
0165デフォルトの名無しさん
2006/05/24(水) 15:15:350166デフォルトの名無しさん
2006/05/24(水) 15:36:19「猫でも・・・」や「WisdomSoft」にあるソースを見てもLoadResource
の後処理らしき処理がわかりません。検索もしてもいまいちわからずです。
LoadResouraceに対応した解放処理は不要なんでしょうか?
0167デフォルトの名無しさん
2006/05/24(水) 15:56:20For 32-bit Windows applications, it is not necessary to free the resources loaded using LoadResource function.
http://support.microsoft.com/?scid=kb;ja;193678
0169デフォルトの名無しさん
2006/05/24(水) 17:11:08まさかWM_QUITが来た時点でプロセスが終了するわけじゃないよね。
えーっとつまり、
{
while( GetMessage( &msg, NULL, 0, 0 ) > 0 )
{
TranslateMessage( &msg );
DispatchMessage( &msg );
}
MessageBox( NULL, "通るかな", NULL, MB_OK );
}
これでどんな時にも(エラー終了以外で)「通るかな」と表示されますか?
0170デフォルトの名無しさん
2006/05/24(水) 17:13:51シャットダウン要求があってしばらく終了しないでいると
プロセスが強制的に殺されることがある。
0171デフォルトの名無しさん
2006/05/24(水) 17:16:07例外が発生したら一気にブロックの外に飛ぶ気がする
017276
2006/05/24(水) 18:00:18ありがとうございます。
0173デフォルトの名無しさん
2006/05/24(水) 18:05:30新規作成→Win32アプリで 標準的な"Hello World!"アプリケーションを選択し、
適当にメニュー項目を作成。
んでWndProcでそのメニュー項目の処理にでNULLをスローしてみた。
>>171の言うとおりだった。
0174デフォルトの名無しさん
2006/05/24(水) 18:07:56サブクラス化をしたときは既にWM_CREATEが終わった後ですよね?
ですのでサブクラスのプロシージャでWM_CREATEをしてもなにも起きない!
そこまではわかります。
こっから本題。
サブクラスのプロシージャ内で初期化をしたいのですが、
WM_CREATEは使えません。
ですのでどこで初期化をしたらいいのでしょうか?
ご教授願います!
0175デフォルトの名無しさん
2006/05/24(水) 18:11:32自分でするもんじゃない
0176デフォルトの名無しさん
2006/05/24(水) 18:29:050178デフォルトの名無しさん
2006/05/24(水) 18:42:11サブクラス化したあとにメッセージでも送るか、何かのフラグを持つか。
0179デフォルトの名無しさん
2006/05/24(水) 18:49:590180デフォルトの名無しさん
2006/05/24(水) 19:19:56値を変えたときにくるメッセージがあったような・・・
それを使ったら出来るかもしれんけど名前忘れた
0181デフォルトの名無しさん
2006/05/24(水) 19:22:50初耳だ。
0182180
2006/05/24(水) 19:25:19WM_STYLECHANGED
0183180
2006/05/24(水) 19:31:410184180
2006/05/24(水) 19:34:37もしかしてこれって
GWL_STYLEとGWL_EXSTYLEしか判別してくれにゃいとか?
0185デフォルトの名無しさん
2006/05/24(水) 19:57:050186180
2006/05/24(水) 20:06:01どうもすみませんでした。
0187デフォルトの名無しさん
2006/05/24(水) 20:16:00GetClientRectをしても
スクロールバーを含めたサイズしか求められないので・・・
0188デフォルトの名無しさん
NGNG0189デフォルトの名無しさん
2006/05/24(水) 20:22:51もしかしたらWS_VSCROLLだけとか、WS_HSCROLL | WS_VSCROLLのもあるかもしれないので
TabCtrl_AdjustRectと同じようなものがないかなぁって考えてたのですが・・・
0190デフォルトの名無しさん
NGNG0191デフォルトの名無しさん
2006/05/24(水) 20:49:21OSが勝手にクリップして、描画処理を省いてくれるのでしょうか。
それとも自前でクリップするべきでしょうか。
0192デフォルトの名無しさん
2006/05/24(水) 20:54:410193デフォルトの名無しさん
2006/05/24(水) 20:55:28それ俺も気になるな
0194デフォルトの名無しさん
2006/05/24(水) 20:57:430195デフォルトの名無しさん
2006/05/24(水) 20:59:130196デフォルトの名無しさん
2006/05/24(水) 20:59:420197デフォルトの名無しさん
2006/05/24(水) 22:21:26ウィンドウに直接描画するならクリップもクソも無いんでない?
0198デフォルトの名無しさん
2006/05/24(水) 22:27:110199デフォルトの名無しさん
2006/05/24(水) 22:36:54以下勝手な予想。
ShellExecuteEx(コマンドプロンプト起動&1回目のコマンドを渡す)
↓
何らかのAPI?(2回目のコマンドを渡す)
↓
何らかのAPI?(3回目のコマンドを渡す)
↓
:
↓
GetExitCodeCodeProcessで終了
0200デフォルトの名無しさん
2006/05/24(水) 22:48:44試しにサンプルをコンパイルしてみてもやっぱり真っ白でした
エラーは出てません
このスレにエスパーさんがいたら教えて下さい
0201デフォルトの名無しさん
2006/05/24(水) 23:00:460202デフォルトの名無しさん
2006/05/24(水) 23:11:42標準スクロールバーは非クライアント領域の一部だから、
GetClientRectでその分を除いたサイズが返ってくるですよ。
0203デフォルトの名無しさん
2006/05/24(水) 23:17:12CreatePrcessでコマンド/DOSプロンプトを起動させて、
パイプを使ってリダイレクトしてでコマンドを流し込めばいいと思う。
或いは簡易的だけど一時的なバッチファイルを書き出して、それを実行させるという手もある。
0204デフォルトの名無しさん
2006/05/24(水) 23:26:56天下のMSDNが誤っている件
0205デフォルトの名無しさん
2006/05/24(水) 23:31:100206片桐摩美
2006/05/24(水) 23:33:28回答1
http://www.kumei.ne.jp/c_lang/nogif.htm
回答2
リソース・エジタでビットマップリソースを作る
(エジタなのがミソ)
回答3
WM_PAINTに処理を書いてないかな?
0207デフォルトの名無しさん
2006/05/24(水) 23:37:52あんただれよ?
0208デフォルトの名無しさん
2006/05/25(木) 00:34:45激しくスレ違い
0209デフォルトの名無しさん
2006/05/25(木) 08:18:55ウインドウクラスの
wc.lpszClassName = "window";
の部分に↑のように入力したら
e:\make_game\game1\main.cpp(44) : error C2440: '=' : 'const char [7]' から 'LPCWSTR' に変換できません。
指示された型は関連がありません。変換には reinterpret_cast、C スタイル キャストまたは関数スタイルのキャストが必要です。
↑のようなエラーがでました。
char szClassName[]="window";
とやって再び
wc.lpszClassName = (LPCWSTR)szClassName;
と入力したらビルドは通りましたが
クラスネームの配列の中に"䥗䑎坏"っていうわけのわからん文字が入ってました。
いろいろネットやMSDNで調べましたが原因がわかりません。お願いします、原因が
わかる方教えてください。
あと環境はVisual Stadio 2005でC++です。
0210デフォルトの名無しさん
2006/05/25(木) 08:28:49リテラル文字列は TEXT マクロ
0211デフォルトの名無しさん
2006/05/25(木) 08:29:33_T("window");
0212デフォルトの名無しさん
2006/05/25(木) 09:56:340213デフォルトの名無しさん
2006/05/25(木) 10:03:15UNICODEが使われるようになったからね
0214デフォルトの名無しさん
2006/05/25(木) 10:15:080215デフォルトの名無しさん
2006/05/25(木) 10:42:150217デフォルトの名無しさん
2006/05/25(木) 11:47:02ttp://www.woodybells.com/delphi_tips/index.cgi?mode=view&no=5
↑このページの方法でカーソルハンドルを取得すると、コンソール(cmd.exe)ウィンドウに
のせたカーソルが砂時計になっています(見た目では矢印)。
見た目通りのカーソルハンドルを取得するにはどうすればよいのでしょうか?
0218デフォルトの名無しさん
2006/05/25(木) 11:53:05winnt.hの中で、
typedef WCHAR *LPWSTR, *PWSTR;
typedef CHAR *LPSTR, *PSTR;
となっている。
んで、マルチバイト環境では、LPTSTRはLPSTR(TCHARはchar)と解釈され、
ワイド文字環境では、LPTSTRはLPWSTR(TCHARはwchar_t)と解釈される。
APIの関数も、GetCurrentDirectoryの場合、
リファレンスでは
DWORD GetCurrentDirectory(DWORD nBufferLength, LPTSTR lpBuffer);
となっているが、実際winbase.hの中では、
DWORD GetCurrentDirectoryA(DWORD nBufferLength, LPSTR lpBuffer);
DWORD GetCurrentDirectoryW(DWORD nBufferLength, LPWSTR lpBuffer);
の2つの関数が宣言されており、
これを環境に応じて、GetCurrentDirectoryAとGetCurrentDirectoryWを切り替えている。
コード書く奴は、LPTSTRとWCHARを巧く利用せんとね。
あと、スレ違いだが、
#include <tchar.h>
#include <clocale>
#include <cstdio>
void _tmain(void){
_tsetlocale(LC_ALL, _T("jpn"));
_tprintf(_T("Hello World!\n"));
}
この説明をしているサイトが少ないかも。
0219デフォルトの名無しさん
2006/05/25(木) 18:00:460220デフォルトの名無しさん
2006/05/25(木) 18:02:33ググレ
0221デフォルトの名無しさん
2006/05/25(木) 18:03:40地域化を深く考えるわけでなければロケール文字列は""で十分だと思う。
あと、C++を使うのならstd::locale::globalだろ。
0222デフォルトの名無しさん
2006/05/25(木) 18:33:40参考になるようなサイトがあったら教えていただければ幸いです
0223デフォルトの名無しさん
2006/05/25(木) 18:42:03OSはWindows XP SP2で動作して欲しいです
0224デフォルトの名無しさん
2006/05/25(木) 19:06:50WinNT系って、
setlocaleせんと日本語表示できないんだっけ?
コンソールに限るけど。
0225デフォルトの名無しさん
2006/05/25(木) 19:28:16WMIにありそうかも。
0226デフォルトの名無しさん
2006/05/25(木) 19:55:400227224
2006/05/25(木) 20:09:23WriteConsoleOutput!?
これは知らんだった!
ナイスです!
0228デフォルトの名無しさん
2006/05/25(木) 20:20:48明示的リンク以外でkernel32.dllのRtlZeroMemoryを呼び出す方法はありますか?
環境はVisual C++ 2005 Express Editionです。
0229デフォルトの名無しさん
2006/05/25(木) 21:01:590230デフォルトの名無しさん
2006/05/25(木) 21:06:18WMIで検索してみましたが良い情報は得られませんでしたorz
0231デフォルトの名無しさん
2006/05/25(木) 21:11:07でもなんでkernel32のRtlZeroMemoryを使いたいの?
0232デフォルトの名無しさん
2006/05/25(木) 21:14:070233デフォルトの名無しさん
2006/05/25(木) 21:21:42ハードウェア毎に違うんじゃないの?
ドライバ直接叩くとかしないと
0234デフォルトの名無しさん
2006/05/25(木) 21:24:07ありがとうございます。
一応思ってたことはできました。
>>231
CRTを使いたくないからです。
0235LCD派
2006/05/25(木) 21:29:580236デフォルトの名無しさん
2006/05/25(木) 21:34:36”ファイルを開く”ダイアログがあったから、ディレクトリもあるかと
思ったんですが、見つからないのでよろしくお願いします。
0237デフォルトの名無しさん
2006/05/25(木) 21:34:540238デフォルトの名無しさん
2006/05/25(木) 21:43:380239デフォルトの名無しさん
2006/05/25(木) 21:44:320240デフォルトの名無しさん
2006/05/25(木) 21:45:020241デフォルトの名無しさん
2006/05/25(木) 21:54:460242デフォルトの名無しさん
2006/05/25(木) 21:58:010243デフォルトの名無しさん
2006/05/25(木) 21:59:00インライン展開されるはずだし
0244デフォルトの名無しさん
2006/05/25(木) 21:59:43その場にインラインで展開されると思うけど。
0245デフォルトの名無しさん
2006/05/25(木) 22:07:000246デフォルトの名無しさん
2006/05/25(木) 22:12:31ZeroMemory って書いておけば、コードにも crt 由来の行はないし、
出てくるオブジェクトにも存在しなくなる。
それはともかくとして、memset とか memcpy は AMD のサイトに有る
プリフェッチ使って最適化した奴使うのが良いと漏れは思うな。
入れ替えるだけで僅かながら高速化されるからラク。
0247デフォルトの名無しさん
2006/05/25(木) 22:13:16ファイルと違って難ずくわからん。でもサンクス。
0248デフォルトの名無しさん
2006/05/25(木) 23:47:15ドライバ書くのはたぶん無理です…
0249デフォルトの名無しさん
2006/05/25(木) 23:55:330250デフォルトの名無しさん
2006/05/26(金) 00:16:44出来るとすればここから情報を拾うこととか。
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/bluetooth/bluetooth/bluetooth_start_page.asp
0251デフォルトの名無しさん
2006/05/26(金) 01:23:31んで、結局Sockにたどり着くんじゃなかった?
0252デフォルトの名無しさん
2006/05/26(金) 02:04:38ですので、windows.hがかってにtchar.hをインクルードしているものだとばかり思っていました。
それで先日久しぶりにコンソールのプログラムを作ろうと思いました。
そしたらTCHARやTEXTマクロはないといわれました。
_tcharや_Tマクロはありましたけど・・・
もしかしてTCHARやTEXTマクロはウィンドウズアプリケーション固有のものなのでしょうか?
0253デフォルトの名無しさん
2006/05/26(金) 03:27:380254デフォルトの名無しさん
2006/05/26(金) 03:39:10マジレス: Cランタイムライブラリ
ネタレス: 栃木放送
好きなほうを選べ
0255デフォルトの名無しさん
2006/05/26(金) 03:45:21GetModuleHandle って、プログラムの仮想空間に配置されている
モジュールのベースアドレスを返すわけだよね?
これの例が毎回成功するってことはKernel32 って、
どのプログラムでも同じアドレスに配置されるの?
それとも根本的におれの考え方間違ってる?
0256デフォルトの名無しさん
2006/05/26(金) 03:56:540257デフォルトの名無しさん
2006/05/26(金) 04:03:13LVS_EDITLABELSのあるリストビューで二列目のデータを変えたりしたいのですが
0258デフォルトの名無しさん
2006/05/26(金) 04:19:14とりあえず
ttp://www.kab-studio.biz/Programing/Codian/MxA/09.html
で「LPTSTRとLPCTSTR」のところを読んだらいいと思う
0259デフォルトの名無しさん
2006/05/26(金) 06:00:40ググってみると
ttp://www.microsoft.com/msdownload/platformsdk/sdkupdate/
ってリンクが色んなところから張られているんですが、
今この先には、Server 2003 SP1 Platform SDKしかないようです。
Download Centerで「core platform sdk」と検索しても
ヒットしないですし、公開終了してしまったのでしょうか・・・。
getaddrinfoを使おうと思ってWinsock2のヘッダをインクルードしても
見つからないよって言われてしまい、仕方なくMSDNに載っていた
関数の宣言をそのままコピペして使ってみたのですが、
危険な呼び出しだとか言われてしまい途方に暮れています。
公開終了してしまっているなら、
winsock2.hかws2tcpip.hにあるgetaddrinfoの宣言を
どなたかコピペしていただけませんか・・・?
0260デフォルトの名無しさん
2006/05/26(金) 06:05:37これのどこがPlatform SDKじゃないんだよ。
0261デフォルトの名無しさん
2006/05/26(金) 06:24:31ありがとうございます。
え、Win98とかに対応していないみたいだから違うのかと思ったんですが、
これでよかったんですか。
Serverとか思いっきり書いてあるので、なんか入れたらアプリが
NT系専用になってしまいそうで、不安で・・・。
getaddrinfoの宣言にWINAPIつけたら問題なく動くようになってしまったので、
とりあえずこのまま行こうと思います。
自己解決すみません。
0262デフォルトの名無しさん
2006/05/26(金) 06:38:270263デフォルトの名無しさん
2006/05/26(金) 07:08:58Platform SDKに書かれているWindowsのバージョンは対応している一番新しいものを表す。
古いWindowsのプログラムを書くのには使えないということは決してない。
流石にWin16は無理だけど。
0264デフォルトの名無しさん
2006/05/26(金) 07:31:300265デフォルトの名無しさん
2006/05/26(金) 08:00:30断り書きがあるわけだしな
0266デフォルトの名無しさん
2006/05/26(金) 08:01:01新しいのだと、
WTLやATLでコンパイルエラーが出たりするんだよね。
0267デフォルトの名無しさん
2006/05/26(金) 09:27:55MicrosoftR Windows Server 2003 R2 Platform SDK - March 2006 Edition
も出てるよ
0268257
2006/05/26(金) 13:14:10ですので
リストビューのセルの上でクリックしたときにエディットコントロールを表示し
そこに入力した値をそのセルの値にしようと考えました。
それで下記のものが作りかけのソースです。
static HWND hList, hEdit;
LVHITTESTINFO HitTest;
case NM_CLICK:
GetCursorPos(&HitTest.pt);
ScreenToClient(hList, &HitTest.pt);
ListView_SubItemHitTest(hList, &HitTest);//押したセルを取得
lvColumn.mask = LVCF_WIDTH;
SendMessage(hList,LVM_GETCOLUMN,HitTest.iSubItem,(LPARAM)&lvColumn);//列の幅を得るため(高さはどうやって取得するの?)
lvItem.iSubItem = HitTest.iSubItem;
lvItem.iItem = HitTest.iItem;
lvItem.mask = LVIF_TEXT;
SendMessage(hList, LVM_GETITEM, 0, (LPARAM)&lvItem);//選択したセルの文字列取得
SetWindowText(hEdit, lvItem.pszText);//取得した文字列をhEditに格納←一列目はちゃんと文字列が表示されるのに二列目はなぜか文字化けする
MoveWindow(hEdit, わかんない, わかんない, lvColumn.cx, わかんない);//選択したセルの上にhEditを被せる
SetFocus(hEdit);//hEditにフォーカス移動←これをしたらなぜか文字列がかわらない
break;
見てもらったら最初に目に付くと思われるMoveWindowの「わかんない」ですが
これは選択したセルの左上の座標がわからないのと、セルの高さが取得の仕方がわからないということです。
だれかこのソースにこうしたらいいと思うと指摘してもらえないでしょうか?
根本的に間違っているところがあるならそれも指摘お願いします。
0269デフォルトの名無しさん
2006/05/26(金) 13:20:02exeのベースアドレスをkernel32.dllと同じにし、再配置情報を付けなかった場合、下記のエラーが発生する。
>app.exe - システム DLL の無効な再配置
>システム DLL kernel32.dll がメモリ内で再配置されました。アプリケーションは正常に動作しません。
>再配置が起きたのは、DLL app.exe が、Windows システム DLL のために予約されているアドレス範囲を
>使用していたためです。この DLL のベンダに連絡して、新しい DLL を入手してください。
しかし64bitプロセスと32bitプロセスでは、ベースアドレスや関数アドレスも違いそうだ
0270デフォルトの名無しさん
2006/05/26(金) 13:23:12LVM_GETSUBITEMRECT
0272デフォルトの名無しさん
2006/05/26(金) 15:08:16そういうことをするには、
SendDlgItemMessageのWM_GETFONTでフォントを取得。
フォントサイズを変える。
SendDlgItemMessageのWM_SETFONTで新しいフォントを入力。
ということをしないといけないのでしょうか?
0273デフォルトの名無しさん
2006/05/26(金) 15:13:050274デフォルトの名無しさん
2006/05/26(金) 15:22:01もっといい方法があったら楽なのに・・・
0275デフォルトの名無しさん
2006/05/26(金) 15:57:330276デフォルトの名無しさん
2006/05/26(金) 17:01:11どうもありがとう。
レスの内容で検索したらいい記事が見つかった。
http://japan.internet.com/developer/20050830/26.html#appendixes
0277268
2006/05/26(金) 18:09:14自分でエディットコントロール用意する必要ない?
0278277
2006/05/26(金) 18:54:42これを見てそう思ったんだけどそんなことを言ってるのかな?
自分にはこのソースわかんないッス!!
0279名前が欲しい名無しさん
2006/05/26(金) 21:11:53winsock2のWSASocketにてWSA_FLAG_OVERLAPPEDを指定したいのですが、当方VB6につき自前で値を指定しなければなりません。
Googleで検索したのですが見つからず、とうとう根負けしてしまいました。
ご存知の方、もしくは調べるヒントなどお持ちの方がいらっしゃいましたら教えて頂けませんでしょうか?
何卒宜しくお願いします。
板違いでしたら申し訳有りません。
0280デフォルトの名無しさん
2006/05/26(金) 21:20:20調べ方としては、Platform SDKをインストールしてヘッダ見るのが確実かな。
あとは、Googleで"define WSA_FLAG_OVERLAPPED"みたいに
defineを付けて""で括って検索してみるとか。
0281名前が欲しい名無しさん
2006/05/26(金) 21:25:53""で括る・・・でしたか;
""無しでは検索かけてみたのですが。。。
Platform SDKという物も早速見てみたいと思います。
有難う御座いました!
0282デフォルトの名無しさん
2006/05/26(金) 22:25:040283デフォルトの名無しさん
2006/05/27(土) 07:06:02後はTEBとPEBですね・・・Webには断片的な情報しかないみたいです。
0284デフォルトの名無しさん
2006/05/27(土) 12:56:18http://www.kumei.ne.jp/c_lang/sdk/sdk_36.htm
自作のウィンドウプロシージャを作って、元々のウィンドウプロシージャと入れ替えるって事?
元々のウィンドウプロシージャに機能を追加する事はできないのですか?
0285デフォルトの名無しさん
2006/05/27(土) 13:02:470286デフォルトの名無しさん
2006/05/27(土) 13:03:570287デフォルトの名無しさん
2006/05/27(土) 13:11:18なんで、わざわざ別のウィンドウプロシージャを定義して入れ替えたりしてるんだろう、と思いまして、、
0288デフォルトの名無しさん
2006/05/27(土) 13:20:52元をどうにかすることができないから、サブクラス化で後付するんだ。
0289デフォルトの名無しさん
2006/05/27(土) 13:28:360290デフォルトの名無しさん
2006/05/27(土) 13:31:020291デフォルトの名無しさん
2006/05/27(土) 19:36:36それで受け取るbufサイズを出来るだけで抑えたいのですが
調べた限りGetWindowTextLengthと同等の動きをするメッセージが見当たりません。
これはもしかして最大サイズのbufを用意するしかないのでしょうか?
0292デフォルトの名無しさん
2006/05/27(土) 21:17:230293デフォルトの名無しさん
2006/05/27(土) 21:53:050294291
2006/05/27(土) 22:24:55LVM_GETITEMTEXTのマクロ、ListView_GetItemTextは
void ListView_GetItemText(
HWND hwnd, //リストビューのウィンドウハンドル
int iItem, //行
int iSubItem, //列
LPTSTR pszText, //バッファのアドレス
int cchTextMax //バッファのサイズ
);
ですよね。
つまりpszTextに指定するバッファを
自分で用意しなくてはいけない。
cchTextMaxの文字数も自分で指定しなくてはいけない。
ということではないのでしょうか?
ですので前もってバッファを用意するためには文字数を取得しなくてはいけないですよね?
どっかまちがってるのかな・・・
0295デフォルトの名無しさん
2006/05/27(土) 22:34:01pszTextが指すバッファをオーバーして書き込まないように最大文字数を指定してね、ということ。
入りきらない場合は切り詰められる。
文字数を取得する方法は無い(と思う)ので、十分な大きさのバッファを用意するか
全部取得できるまでバッファを拡張しつつループするようにする。
MFCやWTLでは後者の方法を採っている。
0296291
2006/05/27(土) 22:34:31ということは十分なバッファとサイズを指定しなくてはいけない!
そういうことだと思ったのですが・・・
0297デフォルトの名無しさん
2006/05/27(土) 22:38:56その為のバッファ長なんだから。
0298デフォルトの名無しさん
2006/05/27(土) 22:44:37ということは下記のような同じ処理を何回もするということですよね?
1.GlobalAllocで領域確保
↓
2.LVM_GETITEMTEXTで文字列取得
↓
3.領域が足りなかったら領域を開放をして1に戻ってやり直し
↓
4.取得した文字列をどっかに表示して領域の開放
という処理をするのですよね?
そういうことをしたら遅くなりませんかね?
つまりこういうことですか?
最初にこれぐらいあったら充分だろと思える領域を確保!
それから1をする・・・のかな?
0299デフォルトの名無しさん
2006/05/27(土) 22:47:350300デフォルトの名無しさん
2006/05/27(土) 22:50:09>it returns the number of characters in the pszText member of the LVITEM structure.
俺は英語苦手なんで合ってるか分からないが、あくまで取得できた文字数を返すと書かれてるように思える
0301デフォルトの名無しさん
2006/05/27(土) 22:52:36GlobalAllocを使う理由がわからんが、そういうこと。
文字列長によるが、バッファ長を2倍2倍していけばそんなに回数かからないと思う。
0302デフォルトの名無しさん
2006/05/27(土) 22:53:12OCXの登録ができなくなりますが、
それはなぜでしょうか?
OCX
void FuncA()
{
FuncB();
}
DLL
void FuncB()
{
FuncC();
}
DLL
void FuncC()
{
}
0303デフォルトの名無しさん
2006/05/27(土) 23:06:19WINAPIって領域を確保するのにmallocではなく、
GlobalAllocを使わないといけないのではないの?
それとC++ではないのでnewを使えないからというつもりだったのですが・・・
もしかしてまたなんか間違えたかなかな?
0304デフォルトの名無しさん
2006/05/27(土) 23:19:26今はGlobalAlloc/LocalAllocよりもHeapAllocのほうが推奨されている。
また、mallocやnewだって使いたければ好きに使ってよい。
0305デフォルトの名無しさん
2006/05/27(土) 23:21:03>The global functions are slower than other memory management functions and do not provide as many features.
>Therefore, new applications should use the heap functions.
>However, the global functions are still used with DDE, the clipboard functions, and OLE data objects.
0306デフォルトの名無しさん
2006/05/27(土) 23:30:26http://www.microsoft.com/japan/developer/library/jpwinpf/_win32_globalalloc.htm
> 注意 グローバル関数は他のメモリ管理関数より低速で、提供する機能も多くありません。
> そのため、新しいアプリケーションは「heap functions」(ヒープ関数)を使うべきです。
> しかし、DDE 関数とクリップボード関数では、依然としてグローバル関数が使われています。
0307デフォルトの名無しさん
2006/05/27(土) 23:44:53逆に重要なのを消しちゃったりするから困る
まぁその部分については問題ないが
0308デフォルトの名無しさん
2006/05/27(土) 23:45:56読めなないならこれを機会に英語を勉強してもらおうと思った。
日本語版MSDNは不完全で訳がイマイチだし。
0309デフォルトの名無しさん
2006/05/27(土) 23:53:48>>305の文章読んだことありました!
翻訳サイトでちょっと読んだだけだったので
「依然としてグローバル関数・・・」のところを見て
まぁいいかぐらいにしか思ってませんでした。
DDE 関数とクリップボード関数ではだったのですか・・・
0310デフォルトの名無しさん
2006/05/28(日) 02:19:00ダイアログを表示さし、入力終えてOK押すとダイアログは消え
別に用意しておいたウィンドウにスイッチしてそのウィンドウに
結果を表示させたいのですが
まず、最初にウィンドウクラスでバックグラウンドをNULLで塗って
その登録したやつを、クリエイトウィンドウでつくってその真上に
ダイアログを表示させて......
この最初の時点でつまづいてます。
ふつうにウィンドウのメニューからダイアログを表示させる事は
できるのですが.....
オーナーウィンドウがクリエイトをメッセージした時
リソースからダイアログのハンドルを作って
ShowWindowして、描画したいオーナーウィンドウを
ダイアログがデストロイした時にオーナーをShowWindow
すれば良いのか、もうわかんなくなってしまって。
くずたれで、質問内容も中途半端なのは承知してます。
ただ、何かヒントを頂けないでしょうか。お願いします。
0311デフォルトの名無しさん
2006/05/28(日) 02:42:46>クリエイトをメッセージした
意味不明
0312デフォルトの名無しさん
2006/05/28(日) 04:01:320313デフォルトの名無しさん
2006/05/28(日) 09:57:24�@.OK押したら消えるダイアログを作成しる。
�A.ウィンドウの上に、�@を表示し動作を確認する。
�B.ウィンドウの上に、�@を�A回連続で表示するように改造してみる。
作成途中に気付くと思うが。
0314sage
2006/05/28(日) 13:02:360315デフォルトの名無しさん
2006/05/28(日) 13:21:070316デフォルトの名無しさん
2006/05/28(日) 15:39:54にてHeapAllocの説明を読んだのですが、
GlobalAllocはHeapAlloc 系だと書いていました。
>>305の文章とこの文章ではなにかがおかしく感じるのですが
とくに「グローバル関数よりヒープ関数を使ったほうがいい」ってとこでが・・・
0317デフォルトの名無しさん
2006/05/28(日) 15:57:16わかりました
とにかく一個ずつの処理を追って確認していきます。
一気に作ろうと思った、俺の頭がどうかしてました。
0318デフォルトの名無しさん
2006/05/28(日) 16:36:36Win32/64ではGlobalAllocは内部でHeapAllocを呼び出すという実装になっている。
だから直接HeapAlloc呼べばいいだろということ。
0319デフォルトの名無しさん
2006/05/28(日) 17:12:11つまり無駄な処理はなくそうってことですね!
0320デフォルトの名無しさん
2006/05/28(日) 17:18:140321デフォルトの名無しさん
2006/05/28(日) 19:13:14LPCTSTRじゃなくてLPCSTRなんだが
GetProcAddress(hDLL,_T(
0322デフォルトの名無しさん
2006/05/28(日) 19:14:28GetProcAddressって2番目の引数が
LPCTSTRじゃなくてLPCSTRなんだが
GetProcAddress(hDLL,_T("HogeHoge"));
じゃなくて
GetProcAddress(hDLL,"HogeHoge");
で呼べってこと?
0323デフォルトの名無しさん
2006/05/28(日) 19:39:320324デフォルトの名無しさん
2006/05/28(日) 19:58:130325322
2006/05/28(日) 20:04:390326デフォルトの名無しさん
2006/05/28(日) 20:13:240327デフォルトの名無しさん
2006/05/28(日) 20:20:49W版自体が無いから、自分で文字コード変換する。
0328322
2006/05/28(日) 20:24:13がんばる。
0329デフォルトの名無しさん
2006/05/28(日) 22:17:23とか考えてる自分は間違っているのでしょうか?
0330デフォルトの名無しさん
2006/05/28(日) 22:27:190331デフォルトの名無しさん
2006/05/28(日) 22:43:59結局9x系とNT系でバイナリ2つ用意しないといけないのが面倒
0332デフォルトの名無しさん
2006/05/28(日) 22:51:310333デフォルトの名無しさん
2006/05/28(日) 22:53:45俺の知り合いにもいるな
未だにMe使ってる奴
まぁそれでも俺は9x系はばっさり切り捨てるが
対応する必要もメリットも無いしな
0334デフォルトの名無しさん
2006/05/28(日) 23:04:10非Unicodeの文字列をUnicode版のapiで読めませんかということだろ
非Unicodeの文字列なんだから非Unicode版のapiを使うのは当たり前じゃないか?
0335デフォルトの名無しさん
2006/05/28(日) 23:22:45普通に善意的に解釈すれば
MultiByteToWideChar
0336デフォルトの名無しさん
2006/05/28(日) 23:25:110337デフォルトの名無しさん
2006/05/28(日) 23:28:460339デフォルトの名無しさん
2006/05/28(日) 23:42:49つMicrosoft Layer for Unicode
全く動かないというのは勘弁してくれ。
俺は今でも9xを使うこともあるんだ。(流石にメインPCはXPだけど)
0340デフォルトの名無しさん
2006/05/28(日) 23:48:12参考までに何に使ってるか教えて頂けないでしょうか?
0341デフォルトの名無しさん
2006/05/28(日) 23:52:390342デフォルトの名無しさん
2006/05/29(月) 01:09:54俺も敢えて9xマシンを残しておく理由を聞きたい
古いソフトでもなければ大抵はXPで動くんだし
動かなくてもVMwareとかでどうにかできるんだし
0343デフォルトの名無しさん
2006/05/29(月) 01:15:08試験をする身になって考えてみろよ!
98、Me、2000、XPをサービスパックごとに試験しろって鬼じゃん?
98すぐ変な動きするし!
0344デフォルトの名無しさん
NGNG2.FM-TOWNS使いだから
0345デフォルトの名無しさん
2006/05/29(月) 01:36:130346デフォルトの名無しさん
2006/05/29(月) 02:29:22のサンプルソースをborlandC++にてコンパイルしたら
Error: 外部シンボル 'InternetOpenA' が未解決(C:\DOCUMENTS AND SETTINGS\OWNER\デスクトップ\A.OBJ が参照)
Error: 外部シンボル 'InternetOpenUrlA' が未解決(C:\DOCUMENTS AND SETTINGS\OWNER\デスクトップ\A.OBJ が参照)
Error: 外部シンボル 'InternetReadFile' が未解決(C:\DOCUMENTS AND SETTINGS\OWNER\デスクトップ\A.OBJ が参照)
Error: 外部シンボル 'InternetCloseHandle' が未解決(C:\DOCUMENTS AND SETTINGS\OWNER\デスクトップ\A.OBJ が参照)
となりました。
これはなにをしたら動くのでしょうか?
wininet.hはインクルードしています。
0347デフォルトの名無しさん
2006/05/29(月) 02:58:30Wininet.libをリンクすれば動くんじゃないかな
0348デフォルトの名無しさん
2006/05/29(月) 03:25:49貧乏ですみません。
使い続けてすみません。
生(ry
0349デフォルトの名無しさん
2006/05/29(月) 04:59:300350デフォルトの名無しさん
2006/05/29(月) 06:02:571. PC-9821用Windows 2000もある(XPはないが)
2. TOWNS版Windows 98なんてあったっけ?
0351デフォルトの名無しさん
2006/05/29(月) 06:52:11Windows 98
使っている理由はそのPCの性能が低すぎるから。
あと、結構最近までそれが家のメインPCだったこともあって、
俺は9xで動かないソフトを作るという気にならない。(9xで動作する保障があるかどうかは別問題)
そのPCへ試しにWindows 2000とVS .NET 2003を入れてみたが、
何か操作しようとする度にHDDはガリガリ言うし、
Boost.Lambdaを使ったプログラムをビルドすればいつまで経っても終わらない。
けど不要なサービスを止めたりすれば、メモリ64MBでもWin 2kが意外と使い物になったのは驚きだった。
0352デフォルトの名無しさん
2006/05/29(月) 09:07:14_MAX_PATHを超えるパスが使えるぐらいしか、思いつかないんだが・・・・・
0353デフォルトの名無しさん
2006/05/29(月) 09:35:59NTカーネルのネイティブはすべてうにこーど。
ANSI版のAPIは、たんに文字コードを変換しているだけのラッパ。
0354デフォルトの名無しさん
NGNG1.使ってるデバイスによってはWin2k用のドライバがないので9xを使わざるを得ない場合がある。
2.Windows95ならある。
0355デフォルトの名無しさん
2006/05/29(月) 10:32:45Shift JISに無いUnicodeの文字をファイル名に使われても読み書きできる。
まぁトラブるのは、ハートマークみたいな記号系ぐらいだと思うけどさ。
0356デフォルトの名無しさん
2006/05/29(月) 14:16:13ログイン画面やCTRL+ALT+DELで出る画面をキャプチャしたいのですが。
・アプリケーションをサービス化(SERVICE_WIN32_OWN_PROCESSとSERVICE_INTERACTIVE_PROCESS権限)
・OpenWindowStationとOpenDesktopにてWinlogonのデスクトップハンドルを取得
・EnumDesktopWindowsにてウインドウの列挙
・列挙したウインドウのからGetDCにてHDCの取得
までは出来たのですがGetPixelでピクセルの取得ができません。
GetDeviceCapsでGetPixelは使用可能のように見えるのですが・・・。
気になる事はSetThreadDesktopとSwitchDesktopを使用するとBUSYでエラーになります。
何か必要な処理が他にあるのでしょうか?
宜しくお願いします。
0357デフォルトの名無しさん
2006/05/29(月) 14:40:12まずは、BitBlt関数でやるべきだと思うが。
0358デフォルトの名無しさん
2006/05/29(月) 15:34:37XPだと名前順にソートしやがるorz
勝手にソートさせないことってできますか?(要はそのフォルダへの
転送順や生成順に取ってきたいのです)
似たような問題にぶつかった人いませんでしょうか?
気のせいだろうか…
0359デフォルトの名無しさん
2006/05/29(月) 15:40:030360デフォルトの名無しさん
2006/05/29(月) 15:41:52その要求そもそも無茶。
0361デフォルトの名無しさん
2006/05/29(月) 15:50:07XP(NTFS5.1?)だとファイルシステムレベルで名前順にソートされてる…?
変なことしてるのは承知なんだけどね。
0362デフォルトの名無しさん
2006/05/29(月) 15:51:070363デフォルトの名無しさん
2006/05/29(月) 15:58:15>The order in which this function returns the file names is dependent on the file system type.
>With the NTFS file system and CDFS file systems, the names are returned in alphabetical order.
>With FAT file systems, the names are returned in the order the files were written to the disk, which may or may not be in alphabetical order.
0365デフォルトの名無しさん
2006/05/29(月) 16:04:35NTFSとFATの差のようだ…。
>>363
どうもでした。
0366デフォルトの名無しさん
2006/05/29(月) 16:21:14サービスのプロパティで
「デスクトップとの対話を許可」
のチェックとか
0367デフォルトの名無しさん
2006/05/29(月) 16:25:40何か巧い方法はないですか。
あと、検索してて思ったんですが、esy link libraryってどうですか?
VS2005でうまく動きますか?
0368デフォルトの名無しさん
2006/05/29(月) 16:51:30このサイトまだあった。よかった。
ttp://www.emit.jp/prog/prog_t1.html
0369デフォルトの名無しさん
2006/05/29(月) 16:51:46それを検索できません
0370デフォルトの名無しさん
2006/05/29(月) 16:54:590371356
2006/05/29(月) 16:55:33「デスクトップとの対話を許可」=「SERVICE_INTERACTIVE_PROCESS」
だと思われます。
あと上でGetDCが成功してると書きましたがひょっとすると無効な値かもしれません。
GetLastErrorでは特に何も返ってきてないのですが。。。
ウインドウハンドルはGetWindowTextで「SAS window」などを取得できてますので大丈夫だと思われます
0372デフォルトの名無しさん
2006/05/29(月) 17:01:190373367
2006/05/29(月) 17:09:210374356
2006/05/29(月) 17:57:14ttp://chise.s25.xrea.com/cgi-bin/up/source3/No_1883.txt
簡易的なソースをアップしました。
0375デフォルトの名無しさん
2006/05/29(月) 18:04:38第49回 Windowsで、精度の良いタイマを得る方法について(elユーザー必見!?)
僕も最近見つけた情報なんだけど、超大昔とはいえ氏がelユーザーだったというのも驚き。
ドットネットってdirectx8のSDK使える?それならelも使えると思うんだけど。
0376デフォルトの名無しさん
2006/05/29(月) 18:13:34timeGetTime使った方法ってCPU馬鹿食いせんの?
あと、タイマーの精度上げるイヤーな関数使わないと
精度上がらなかったんじゃあ…。
0377デフォルトの名無しさん
2006/05/29(月) 18:52:09http://www.emit.jp/prog/prog_t1.html
0378デフォルトの名無しさん
2006/05/29(月) 19:19:49サイトってありませんか?
APIに関する事柄を参考にしたいのではなく、どういう風に
他の人は作っていってるのかを参考にしたいです。
一つの処理に対して一つの関数を作るにしても、その関数の
名前付けとか戻り値をどうしてるとか、ある変数を
グローバル変数(関数それぞれで使いたいからそうするのは
わかりますが)にしとくか、staticにしとくか、うまくグローバルや
staticを使わず処理してるとか、人それぞれだと思うのです。
そういう意味で、勉強のために人のソースを見てみたいんです。
海外、国内とわずそういう、ソースを公開してるページを
知ってる方教えてください。
猫でもの本を買って一通り例題等を打ちながらASCIIからでてる
リファレンス本見て、APIに関する内容を理解しつつ勉強してた
のですが、いざ自分で作ろうとすると、どうしても参考にしてきた
ソースが猫でもの本なので、そのクセみたいなのがついていて
他の人はどんな風にソースを書いているのかが気になってしまう
ようになってしまいました。
そういう風な意味で色々なサイトを教えてほしいです。
0379デフォルトの名無しさん
2006/05/29(月) 19:22:470380デフォルトの名無しさん
2006/05/29(月) 19:23:420381デフォルトの名無しさん
2006/05/29(月) 19:25:020382デフォルトの名無しさん
2006/05/29(月) 19:27:390383デフォルトの名無しさん
2006/05/29(月) 19:35:22これまだ落とせるか?
0384デフォルトの名無しさん
2006/05/29(月) 20:11:54豚楠
0385367
2006/05/29(月) 20:16:45あと、フレームを処理させるのに
1.識別子を自前で用意して、呼び出し元の関数を識別子に記録、タイマセット
2.待ち時間が過ぎて、WM_TIMERを捕まえる
3.識別子から呼び出し元の関数にgotoジャンプ、(1へ飛ぶ)
っていう、我ながらベタな方法を使ってるのですが、普通フレーム処理させるのにどうしますか?
0386デフォルトの名無しさん
2006/05/29(月) 20:18:07猫は悪い見本だから反面教師にするといいよ
0387デフォルトの名無しさん
2006/05/29(月) 20:19:49ttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/windowing/timers/timerreference/timerfunctions/settimer.asp
0388367
2006/05/29(月) 20:33:06これって戻り値を返さない無限再帰とかにならないんですか?
0389デフォルトの名無しさん
2006/05/29(月) 20:34:200390デフォルトの名無しさん
2006/05/29(月) 20:40:04385 のリンク先にある MS のドキュメントを見るとまるでワンショットタイマとして動作するように
思えるかもしれないけれども、Windows の SetTimer で設定されるタイマはインターバルタイマなので、
毎回 SetTimer する必要はありません。
それから、フレームを処理させるのに SetTimer のタイマを使うのは全くお勧めできません。
(が、試してみるのも悪くはないでしょう)
0391デフォルトの名無しさん
2006/05/29(月) 20:41:210392デフォルトの名無しさん
2006/05/29(月) 20:54:59質問いたします。
ビットマップをウィドウに表示させるのは、できるのですが、
そのファイルの情報を,取得して,自分で、ウィンドウに書いていくことは、
できるのでしょうか。
よろしくお願いいたします。
0393デフォルトの名無しさん
2006/05/29(月) 21:04:25情報というのが何なのかわかりませんが、
恐らくできます。
0394デフォルトの名無しさん
2006/05/29(月) 21:04:490395デフォルトの名無しさん
2006/05/29(月) 21:07:300396346
2006/05/29(月) 22:29:25ありがとうございます!
本当にそれだけでした!
0398デフォルトの名無しさん
2006/05/30(火) 00:21:01>探してみます。
無理だと思うなあ。
0399デフォルトの名無しさん
2006/05/30(火) 06:15:530400デフォルトの名無しさん
2006/05/30(火) 06:45:050401デフォルトの名無しさん
2006/05/30(火) 07:51:54ありがとうございます。
仕方ないので頑張ってCreateWindow使ってゴリゴリやります。
0402デフォルトの名無しさん
2006/05/30(火) 10:21:54ダイアログのコントロールから受けたデータをウィンドウの方に反映さしたいんですが
グローバル変数を使わずにやりとり出来ないのでしょうか
もしかしてウィンドウプロシージャの中にダイアログプロシージャ放り込んだりするんで
しょうか。
関数の中での数値を静的にして処理するのは仕方がないと思うのですが
成るだけグローバル変数は使いたくないです。
良い方法があれば教えてください。
0403デフォルトの名無しさん
2006/05/30(火) 10:27:51とりあえず、どういう状況なのか読み取れないけど、
メッセージ投げたらイインジャネ?
0404デフォルトの名無しさん
2006/05/30(火) 11:14:590405デフォルトの名無しさん
2006/05/30(火) 11:23:13GWL_USERDATAに、構造体でも仕込んでおいて、そこを更新するという手もある。
けど>>403のいうように、自分で新しいメッセージを定義してwParamとかlParamとかで受け渡した方がいい。
0406デフォルトの名無しさん
2006/05/30(火) 11:57:25OKを押したら各コントロールの状態を取得する。
これが猫だと全部グローバルでやってるから。
0407デフォルトの名無しさん
2006/05/30(火) 12:04:450408デフォルトの名無しさん
2006/05/30(火) 15:19:28DXライブラリはどうよ?
0409デフォルトの名無しさん
2006/05/30(火) 16:19:540410デフォルトの名無しさん
2006/05/30(火) 16:33:55無理。
1プロセスで1つまでしか使えない。
0411デフォルトの名無しさん
2006/05/30(火) 16:39:12ありがとうございました。
0412デフォルトの名無しさん
2006/05/30(火) 17:43:26VC#で、WordObjectLibraryを参照設定せずとも、
wordをハンドリングするために、
CreatObjectを使用したいと考えているのですが、
VC#とCreatObjectの組み合わせは、取り扱いが厄介らしいです。
どうしたらいいのでしょうか。
さっきからぐぐってるのに、全然わかりません。
0413デフォルトの名無しさん
2006/05/30(火) 17:51:010414412
2006/05/30(火) 17:53:33どこに?
C#の掲示板がVBAわかるわけないし、
VBAの掲示板がC#わかるわけないし、
VBAとC#両方扱っているすれないし、
結局、ここしかないのです。
0415412
2006/05/30(火) 17:56:02「COMExceptionはハンドルされませんでした。」
というエラーがどうしても解決できないのです。
0416デフォルトの名無しさん
2006/05/30(火) 17:58:05死んだ方がいいよ
0417412
2006/05/30(火) 18:06:11おまえもな
0418デフォルトの名無しさん
2006/05/30(火) 18:08:06ここで詳しく説明されてるじゃん。
http://dobon.net/vb/dotnet/vb2cs/createobject.html
あと C# スレがどっかにあるから、そっちに粋なヨ。
今のところ API とは何の関係もないから。
CreateObject なんて API も無いしね。
0419412
2006/05/30(火) 18:08:110420デフォルトの名無しさん
2006/05/30(火) 18:15:19むしろ、このスレ的にはCoCreateInstance関数であって、
CreateObjectはスレ違い。
C#系板で、GetTypeFromProgIDがうまくいかねーって聞いたほうがいいかも。
0421デフォルトの名無しさん
2006/05/30(火) 18:19:230422412
2006/05/30(火) 18:20:02そこはもう知ってました。
invokeって、強烈にめんどくさい。
COMExceptionエラーがむかつく。
http://support.microsoft.com/default.aspx?scid=kb;ja;316384
0423デフォルトの名無しさん
2006/05/30(火) 18:20:28C#はそんなに偉大な存在だったのか。
0424412
2006/05/30(火) 18:21:40そうです。
そもそも
どうしてWord.Find find=myDoc.Selection.Find
作って、find.Executeをすると、
COMExceptionなんて出てくるのだ!!
ワードのバージョンを2000から2003に
うpしただけじゃないか!!九層
0425デフォルトの名無しさん
2006/05/30(火) 18:30:230426412
2006/05/30(火) 18:37:03所定のすれがどこなのか、探してみつかってたなら
いまここにいないっつーの
0427デフォルトの名無しさん
NGNG見つかるまで探せ。
0428デフォルトの名無しさん
2006/05/30(火) 18:51:30UZEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE
0429デフォルトの名無しさん
2006/05/30(火) 18:54:48だからココも違うんだって場。
あと、ここでそんな態度とっちゃうとC#スレに言っても誰も教えてくれないから、
どっか他所で聞いたほうが良いと思います。
C#スレもAPIスレも、答える側の人はだいたい同じですから。
ここのフォーラムとかどうでしょう?
http://www.gotdotnet.com/japan/
0430402
2006/05/31(水) 11:50:22みなさんはC言語で書いてるんですか?それともC++で書いてるんでしょうか
C++で書いていった方が先々の事を考えると良いならそうしたいです。
あと>>403さんメッセージを投げるや、>>403さんのGWL_USERDATA
に構造体を仕込むというのも、自分のレベルだとまだ、規定の関数が
投げるメッセージを受け取る程度で、さらにGWL_USERDATAに構造体を
仕込むというのが、Set/GetWindowLongの第二引数のこの値
(GWL_USERDATA)に構造体を仕込むという方法がよくわからないんです。
ですんでGetDlgItemでハンドルを取得して、処理しようと思います。
0431デフォルトの名無しさん
2006/05/31(水) 12:06:58C++使えれば、MFCやWTLで面倒くさいGUIは楽出来るけどね
> Set/GetWindowLongの第二引数のこの値(GWL_USERDATA)に構造体を仕込むという方法がよくわからないんです。
単にポインタを渡すだけ
0432デフォルトの名無しさん
2006/05/31(水) 12:07:18>(GWL_USERDATA)に構造体を仕込むという方法がよくわからないんです
ヒント:ポインタ
0433デフォルトの名無しさん
2006/05/31(水) 12:10:56今、わかるものでやっていくのがベストだと思います。
今のご自身のスキルで直感的にWin32APIも勉強しながら
C++も勉強してもやっていけそう。と思えるならやるべきです。
将来的な観点からみればC++で書けるほうがよいと思います。
ちなみに私はC++派です。
0434430
2006/05/31(水) 12:38:44レスありがとうございます。
今の自分のレベルで出来る事をしながら、新たなやり方を模索しつつ
C++でもやっていけそうなら、少しずつやっていこうと思います。
しっかし、この板の人たちは親切だ。
けっこうここで質問してて、そのたびに、適切なアドバイスをくれる。
俺も知識身につけて質問に答えられるようなレベルになろう。
そして、どこかの誰かの質問にこの板で答えていくのが
直接的では無いが、質問に答えてくださってくれる方々への
恩返しだと思うから。
0435デフォルトの名無しさん
2006/05/31(水) 15:09:59HANDLE hFile = CreateFile(lpcszPath, GENERIC_WRITE, NULL, NULL, OPEN_ALWAYS,
FILE_ATTRIBUTE_NORMAL,NULL);
SetFilePointer(hFile, 1024 * 1024 * 300, NULL, FILE_BEGIN);
SetEndOfFile(hFile);
とすれば、300MBのファイルが高速に作成できますが、これは安全でしょうか?
0436435
2006/05/31(水) 15:19:55CAtlFile::SetSize()も同じような処理をしていたみたいです。
0437デフォルトの名無しさん
2006/05/31(水) 15:30:58それは32と互換性があるとしたら、どれくらい?
0438デフォルトの名無しさん
2006/05/31(水) 16:15:57ほぼ100% 互換ですよ。
「プログラミングモデルの同一性」の項を参照。
http://www.microsoft.com/japan/technet/prodtechnol/winxppro/evaluate/xp64ovw.mspx
0439デフォルトの名無しさん
2006/05/31(水) 16:28:53俺が過去に作ったロガーは、それで2Gのファイルを先に作成したよ。
ただ、ハードディスクの断片化には注意。
0440デフォルトの名無しさん
2006/05/31(水) 16:29:150441デフォルトの名無しさん
2006/05/31(水) 17:33:360442デフォルトの名無しさん
2006/05/31(水) 22:41:19MDIで子ウインドウ生成の仕方を教えてください。
0443デフォルトの名無しさん
2006/05/31(水) 22:42:300444デフォルトの名無しさん
2006/05/31(水) 23:01:41ttp://msdn.microsoft.com/library/en-us/winui/winui/windowsuserinterface/windowing/multipledocumentinterface/usingthemultipledocumentinterface.asp
0445デフォルトの名無しさん
2006/06/01(木) 01:54:41XPでは高速だが2000ではそうでもない。
0446デフォルトの名無しさん
2006/06/01(木) 06:04:45コンピュータがロックされたことを知ることはできないでしょうか。
0447デフォルトの名無しさん
2006/06/01(木) 07:02:130448デフォルトの名無しさん
2006/06/01(木) 07:15:08SystemParametersInfo(SPI_GETSCREENSAVERRUNNING, ?, ?, SPIF_SENDCHANGE);
0449446
2006/06/01(木) 12:47:11ウィンドウのフラグまわりが怪しそうでしたが、それっぽいのはなさそうですね。
とおもってググり続けてたら、もうしわけない、過去に質問ありました(´∀`)
「Win32API 質問箱 Build4」
> 276 名前: デフォルトの名無しさん 投稿日: 02/06/21 18:19
> >>270
> OpenInputDesktop→GetUserObjectInformationでOK、
> と思って試してみたら、ロックされているときはエラーになるなあ。
> はっ、そうか、エラーが帰ってきたらロックされていると思えばいいんだ。(いいのか?)
結果は書いてなかったので試してみます。
0450デフォルトの名無しさん
2006/06/01(木) 21:59:42ttp://wisdom.sakura.ne.jp/system/winapi/win32/win139.html
0451デフォルトの名無しさん
2006/06/01(木) 22:47:43プログラム内からチェック、非チェック状態を切り替えるにはどうすればいいですか?
0452デフォルトの名無しさん
2006/06/01(木) 22:53:05SetMenuItemInfo
0453デフォルトの名無しさん
2006/06/01(木) 22:57:390454デフォルトの名無しさん
2006/06/02(金) 19:08:13コントロールはリソースで作ってるので最初のコントロールに全てフォーカスがあります
最初のページのプロシージャ内のWM_INITDIALOGメッセージ内で
SetFocus(hDlg)、SetFocus(GetParent(hDlg))(一応)、どちらも駄目でした
言うまでも無いですがWM_INITDIALOGは0で返してます
どちらも駄目だったので根本的に違うのかと思ったので
SetFocus(GetDlgItem(hDlg, IDC_HOGE))、SetFocus(GetDlgItem(GetParent(hDlg), IDC_HOGE))
どちらともやってみましたが、こちらもフォーカスが移らず、最初のコントロールに当たってるままでした
プロパティシートのタブのハンドルはプロシージャ内のウィンドウハンドルと違うのでしょうか…
何方かお知恵を貸して頂きたいです・・
0455デフォルトの名無しさん
2006/06/02(金) 19:38:38PSM_GETTABCONTROL ?
0456454
2006/06/02(金) 20:19:14PSM_GETTABCONTROLで、出来ましたありがとうございます
タブのフォーカス設定はページのプロシージャで指定するのでは無く
プロパティシートのコールバックで行うようです…
最初のページのプロシージャ内でPSM_GETTABCONTROLを使ってみましたが効果が無かったです
コールバックでPSM_GETTABCONTROLでハンドルを取得してSetFocusで難なく出来ました
あとPSM_GETTABCONTROLはPropSheet_GetTabControlというマクロが用意されてますね
ありがとうございました
0457デフォルトの名無しさん
2006/06/03(土) 06:51:51しかし、250msごとに設定すると250msに近い間隔で入ってくるみたいです。
これはタイマの分解能によるものだと思うのですが、実際に必要なチェックは1秒ごとで十分だと思うので、1秒ごとに設定しようかと思うのですが、1秒ごとならだいたい正しい時間が得られるでしょうか?
チック割り込みだと結局だんだんズレていくはずだと思うのですが、何かMSDNライブラリを見るとちゃんとCMOS時計を参照してズレを修正するとか何とか書いてあるのですが、これは本当なのでしょうか?
タイマーはやめてGetLocalTime()でチェックした方がいいのでしょうか?
後、このような事をする場合の注意点は、スレッドの優先順位を下げる、という他にあるでしょうか?
0458デフォルトの名無しさん
2006/06/03(土) 08:05:100459デフォルトの名無しさん
2006/06/03(土) 09:36:000460デフォルトの名無しさん
2006/06/03(土) 09:45:55何の処理のタイムアウトなのかにもよるが、よく使うのは
同期オブジェクト+WaitForSingleObject()
0461デフォルトの名無しさん
2006/06/03(土) 10:38:090462デフォルトの名無しさん
2006/06/03(土) 12:59:370463デフォルトの名無しさん
2006/06/03(土) 13:09:12「紙」のようにドラッグ中にウィンドウを表示させて、ドラッグが終われば非表示にさせたいのですが。
0464デフォルトの名無しさん
2006/06/03(土) 13:33:35バックグラウンドのウインドウに対し左矢印キーを1秒間押し続ける
ことをしたいのですが、上手くいきません。
WIN32APIの知識が全くないので、色々調べてはいるのですが、
非常に難しく分からないことだらけなので、以下の質問に
お答えいただけるとありがたいです。(ちんぷんかんな質問であれば申し訳ありません)
<質問>
PostMessageAを使用して左矢印キーをポストしようと思い、以下のように記述しましたが、
動かないのです。各々のパラメータの設定は正しいのでしょうか?
WIN32APIの部分が悪いのか、UWSCの書き方がまずいのか切分けたいのです。
Hwnd:バックグラウンドのウィンドウのID
WM_KWYDOWN = $0100
WM_KEYUP = $0101
PostMessageA(Hwnd, WM_KEYDOWN, VK_LEFT, NULL)
PostMessageA(Hwnd, WM_UP, VK_LEFT, NULL)
*1秒間押し続ける場合というのは実装してません
あと、1秒間押し続ける場合は恐らくiparamのところに記述するようにすればいいと思ってますが、
間違っているでしょうか?
以上よろしくお願いします
0465デフォルトの名無しさん
2006/06/03(土) 14:08:35キーボードはメッセージを送るよりも、keybd_eventかなにかを使ったほうがいいと思う。
0466デフォルトの名無しさん
2006/06/03(土) 14:21:59インターネット上のショートカットを右クリックしたときのポップアップメニューに
自分用の項目を一つ追加したいと思っています。
その項目の内容は詳しくは書きませんが、
クリックしたショートカットのアドレスを表示するようなものです。
ですが方法がまったくもって分かりません。教えてもらえないでしょうか?
メニュー自体の作り方や表示方法はわかっています。
0467464
2006/06/03(土) 14:47:05レスありがとうございます。
keybd_eventやってみましたが、アクティブウインドウへの実行になってしまいました。
バックグランドのウインドウに対してもこのAPIを使用できる方法があるのでしょうか?
0468デフォルトの名無しさん
2006/06/03(土) 15:03:21インターネット上のショートカットというのが、拡張子urlのファイルのことなら関連付けを追加すればよい。
Internet Explorerで表示しているHTML上のハイパーリンクのことなら、
HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\MenuExt以下にキーを追加すればよい。
詳しくはググれ。
0470デフォルトの名無しさん
2006/06/03(土) 18:08:21static int sw = 0;
case WM_LBTNDWN:
sw = 1;
break;
case WM_LBTNUP:
sw = 0;
break;
case WM_MOUSEMOVE:
if(sw){
honyarara;
}else{
honyarara;
}
break;
0471463
2006/06/03(土) 20:34:23あとは、ドラッグしているものがファイルかテキストか判断できればいいのですが。。。
ご存知の方、よろしくお願いします。
0472470
2006/06/03(土) 20:57:26お詫びとして「マウスキャプチャー」という単語を渡しておくから後は好きにしてくれ。
0473デフォルトの名無しさん
2006/06/03(土) 23:11:48WinAPIを呼び出すメカニズムについての質問です。
普通、システムコールをする場合eaxレジスタなどに番号を指定して、
ソフトウェア割り込みをしたすると、OSの割り込みハンドラは戻りアドレスを
スタックに載せたり、割り込みベクタから適切な処理を選択したりして、、、、
というなのを習った記憶があります。
「OSの割り込み〜」以降の処理はOS内部の処理なのに、どうして各プロセスは
Kernel32.dllを個別にメモリにマップする必要があるんでしょうか。
長文スマソ。
0474デフォルトの名無しさん
2006/06/03(土) 23:16:36知らなかった
0475デフォルトの名無しさん
2006/06/03(土) 23:36:20まずはAPIと言う単語の意味から調べろ。
0476デフォルトの名無しさん
2006/06/03(土) 23:40:25こいつ何なんだよー、頭良いのか悪いのかよく分からんなー。
そんな難しい事考えてる暇があったら、少しは既存の文書ぐらい目を通せよなー。
と、思ったが、ただのホームレス予備軍、現暇人か。
ちゃんと働けよ。日本の為に、地球の為に。
この世の中はお前1人が住んでるだけじゃぁねぇんだからな。
そこんとこよ〜く考えて今日は眠れ。じゃなっ!
0477デフォルトの名無しさん
2006/06/03(土) 23:46:41ttp://itpro.nikkeibp.co.jp/article/Windows/20051111/224393/?ST=win-client
0478デフォルトの名無しさん
2006/06/04(日) 00:08:53お前どこの酔っ払ったオッサンだよ。
0480デフォルトの名無しさん
2006/06/04(日) 04:18:43タイトルバーとキャプションはあって、アイコンが無いウィンドウって、
CreateWindowでどうやたら作れますか?
0481デフォルトの名無しさん
2006/06/04(日) 04:28:24RegisterClass でウィンドウクラス登録して、
CreateWindow する。
0482デフォルトの名無しさん
2006/06/04(日) 05:05:34ありがとうございます、できました!!
0483デフォルトの名無しさん
2006/06/04(日) 08:17:030484デフォルトの名無しさん
2006/06/04(日) 15:57:450485デフォルトの名無しさん
2006/06/05(月) 19:56:43CtrlやShiftを押してない状態でAとかBとかのキーを押すと
一番初めの項目へフォーカスが移動してしまいます
このフォーカス移動を殺すにはどうすれば良いんですか?
0486デフォルトの名無しさん
2006/06/05(月) 21:01:36俺も直さないとだめだけど
気にしないでおこう
0487デフォルトの名無しさん
2006/06/05(月) 21:54:43最大化ボタンを押した時の動作はWM_SYSCOMMANDのSC_MAXIMIZEを拾う事で変えられたたですが、
タイトルバーをダブルクリックした時は相変わらすデフォルトの最大化動作になってしまいます。
タイトルバーをダブルクリックした時のメッセージは何を拾うのでしょう?(´・ω・` )
0488デフォルトの名無しさん
2006/06/05(月) 21:57:000489デフォルトの名無しさん
2006/06/05(月) 22:21:380490デフォルトの名無しさん
2006/06/05(月) 22:50:15ヘルプでWM_WINDOWPOSCHANGINGを調べましたがイマイチよく解りませぬ
lParamで渡されるWINDOWPOSのx,y,cx,cyがワークエリア目一杯だったら最大化
しようとしてると判断するんですかね?
>>488
int Ypos,upper_,lower_;
RECT rcWindow;
case WM_NCLBUTTONDBLCLK:
GetWindowRect(hWnd,&rcWindow);
Ypos= HIWORD(lParam);
upper_= rcWindow.top + GetSystemMetrics(SM_CYBORDER);
lower_= upper_ + GetSystemMetrics(SM_CYCAPTION);
if(upper_ < Ypos && Ypos < lower_) OutputDebugString("(´・ω・` ) \n");
break;
こんなコード書いちゃったよヽ(`Д´)ノ
明らかに変だ
0491デフォルトの名無しさん
2006/06/05(月) 23:07:23SendMessage(WM_NCHITTEST, ...) して HT_CAPTIONだったら、
てな感じにするのが良いのではないだろうか。
0492デフォルトの名無しさん
2006/06/05(月) 23:41:07挙動制御っていうのは無効化じゃないの?
最大化を無効にしたいのであれば
DeleteMenu(GetSystemMenu(hWnd, FALSE), SC_MAXIMIZE, MF_BYCOMMAND);
ちゃんとボタンも無効化させるのなら
SetWindowLong(hWnd, GWL_STYLE, GetWindowLong(hWnd, GWL_STYLE) & ~WS_MAXIMIZEBOX);
も追加。
0493487
2006/06/05(月) 23:50:29>SendMessage(WM_NCHITTEST, ...) して HT_CAPTIONだったら、
正直具体例が無いと解り難い… orz
ヒットテストでぐぐるとWM_NCHITTESTが来たときに特定のヒットコードを返す例ばっかだった… orz
あとWM_NCHITTESTはDefWindowProc()の戻り値、つまりDefWindowProc()に渡さないと判別できず、
渡してしまうと後の祭りで制御が出来ない気が…
>>492
無効化じゃないのです。無効化だけならその例の通りで実現済みなのですが…
タイトルバーをダブルクリックした時に、最大化ではなくてウィンドウサイズを任意のサイズに変更したいのです。
MAME32というエミュでゲームをウィンドウモードで起動した時にこれができてるのよね(´・ω・`;)
0494492
2006/06/06(火) 00:00:54任意のサイズにしたいのなら、WM_GETMINMAXINFOを捕まえて
lParam(LPMINMAXINFO)のptMaxSizeを弄ればいいよ。
0495487
2006/06/06(火) 00:25:03やりたいことがこれで実現できますた、マリガトウございます。
MAME32とは挙動が違うけどもうどーでもいいや。
つか今までWM_SIZINGでトラックサイズやらウィンドウサイズ上限/下限やら一々全部計算してやってたのに、
同じ事がこんなに簡単にできたのね。 ○<\_
0496デフォルトの名無しさん
2006/06/06(火) 14:45:47WM_NCHITTESTは、渡した座標が非クライアントエリアのドコにあるかを調べるメッセージ。
これ呼んだだけで最大化されたりはしません。
0497デフォルトの名無しさん
2006/06/06(火) 18:48:16(プロパティシートでない)普通のダイアログ上のリストボックスならちゃんと1項目ずつ移動してくれるのですが…
0498デフォルトの名無しさん
2006/06/06(火) 19:12:070499497
2006/06/06(火) 19:17:360500485
2006/06/06(火) 20:08:53一応解決させた方法書いときますと、ListViewをサブクラス化して
WM_CHARを捕まえ、CtrlとかShiftが押されてない時には
wParamに0をぶち込むことによってフォーカス移動を殺せました
0501デフォルトの名無しさん
2006/06/06(火) 21:11:440502デフォルトの名無しさん
2006/06/06(火) 21:20:090503501
2006/06/06(火) 21:37:38いやそのAPIは知ってるんですけど
一つ一つ読むの面倒だし
列挙が終わってもTRUE返さなかったりするので
一気に取得できるいいAPIないかなと思ったわけです
・・調べたところどうも無いみたいなので
ラッパクラスでも書いてお茶を濁す事にします
0504デフォルトの名無しさん
2006/06/06(火) 21:48:38その順番のままバッファに書き込んでくれるのでしょうか?ソートなどはされませんか?
0505デフォルトの名無しさん
2006/06/06(火) 21:50:150506デフォルトの名無しさん
2006/06/06(火) 22:14:43マイコンピュータやデスクトップの項目、それらのコンテキストメニュー、
ファイルなどのプロパティの表示といったシェル拡張らしき要素はどうすれば扱えるでしょうか。
shell32.dllを利用するのかな、と見当をつけた辺りで先に進めずにいます。
0507デフォルトの名無しさん
2006/06/06(火) 22:21:35msdnでIShellFolder調べてその近くにあるリファレンス等から
めぼしいのを拾ったらある程度は前進できるんじゃね?
よく知らんけど。
0508デフォルトの名無しさん
2006/06/06(火) 22:22:12シェル名前空間、Shell's Namespace、IShellFolderあたりでググれ。
0509デフォルトの名無しさん
2006/06/06(火) 22:24:12COM インタフェイス経由でいろんなオブジェクト(インタフェイス)を使うことになります。
あと「パス」に相当する ITEMIDLIST とか。
それなりにメンドクサイので頑張ってください。サンプルはググレばあるでしょう。
0511デフォルトの名無しさん
2006/06/07(水) 12:11:17命名規則知りたい。
スレ違いでわるいけど。
0512デフォルトの名無しさん
2006/06/07(水) 12:14:16メンバー変数の先頭に付ける…。
ちなみにスタティック変数には「s_」
グローバル変数には「g_」だ。
0513デフォルトの名無しさん
2006/06/07(水) 12:14:37メンバ変数
0514デフォルトの名無しさん
2006/06/07(水) 12:26:02名付けたヤシに聞け!
0515デフォルトの名無しさん
2006/06/07(水) 13:38:19確かある人が「プログラミング言語は抽象化を目的としているので、変数名にハードの情報を散りばめてはいけない」って言ってたな。
0516デフォルトの名無しさん
2006/06/07(水) 13:54:19時刻を表示させます。特に問題無く動いていたと思ったら、よく見ているとたまに
チラつきます。これを抑える方法はないでしょうか。
(無知なりにググってみたら、ダブル(マルチ?)バッファリングという方法は
見つかったのですが、もしもっと簡単に解決する方法があればと思い。。)
0517デフォルトの名無しさん
2006/06/07(水) 13:55:580518デフォルトの名無しさん
2006/06/07(水) 14:13:52では、「ない」と答えればダブルバッファを使うのか?
0519デフォルトの名無しさん
2006/06/07(水) 14:18:400520デフォルトの名無しさん
2006/06/07(水) 14:23:42ttp://www.atmarkit.co.jp/fdotnet/dotnettips/194nopaintbg/nopaintbg.html
ttp://www7a.biglobe.ne.jp/~ni_sky/cgi-bin/YukiWiki/wiki.cgi?mycmd=search&mymsg=WindowsSDK%a4%c7%a5%c0%a5%d6%a5%eb%a5%d0%a5%c3%a5%d5%a5%a1%a5%ea%a5%f3%a5%b0
お好みでドゾ
0521デフォルトの名無しさん
2006/06/07(水) 14:27:27WM_ERASEBKGNDを処理しないことで、多少は改善するかも
0522デフォルトの名無しさん
2006/06/07(水) 15:51:29それに関する詳細な解説みたいなのはないんでしょうか?
GUI周りの知識はネットで検索して雛形を見て組み込む感じでやっているのですが
この方法だとネットに依存しすぎていて、
オフラインでのプログラミング時などに困ってしまいます。
MSDNで調べながらできれば嬉しいんですが
先ほどから探しても見てもそういった形ではまとめられていないようなんですが…
0523デフォルトの名無しさん
2006/06/07(水) 15:52:590524デフォルトの名無しさん
2006/06/07(水) 15:58:560525デフォルトの名無しさん
2006/06/07(水) 16:00:170526デフォルトの名無しさん
2006/06/07(水) 16:14:57毎回ネットでさがさなきゃならんものか?
0527デフォルトの名無しさん
2006/06/07(水) 16:25:55その他のGUI部分を弄りたくなった場合の話です。
0528デフォルトの名無しさん
2006/06/07(水) 16:27:20>それに関する詳細な解説みたいなのはないんでしょうか?
0529デフォルトの名無しさん
2006/06/07(水) 16:29:11定番の初期化の仕方とかそういうの?
PSDK のサンプルとかWTLやMFCのソース 読んだりするのを推奨。
0530デフォルトの名無しさん
2006/06/07(水) 16:51:43おまえ天才
0531デフォルトの名無しさん
2006/06/07(水) 16:59:34デスクトップなどで右クリックしたときに表示される
コンテキストメニューに自分で指定したアプリを
起動するような項目を追加したいのですが
どうすればよいでしょうか?
0532デフォルトの名無しさん
2006/06/07(水) 17:28:290533デフォルトの名無しさん
2006/06/07(水) 20:37:48VC++のような入力補間機能はAPIで手軽に作れたりしますか?
0534デフォルトの名無しさん
2006/06/07(水) 20:47:230535デフォルトの名無しさん
2006/06/07(水) 20:47:37むり
ファイル解析して一覧表みたいなの作って自力表示
0536デフォルトの名無しさん
2006/06/07(水) 20:58:53ttp://msdn.microsoft.com/library/en-us/winui/winui/windowsuserinterface/windowing/windows/aboutwindows.asp
0537デフォルトの名無しさん
2006/06/07(水) 20:59:26IContextMenuだったかも?
0538デフォルトの名無しさん
2006/06/07(水) 21:15:43おまえらはどっち使ってる?
もしくは、どう使い分けてる?
0539デフォルトの名無しさん
2006/06/07(水) 21:18:080540デフォルトの名無しさん
2006/06/07(水) 21:18:33陽に指定したいときだけかな。
0541デフォルトの名無しさん
2006/06/07(水) 21:52:120542デフォルトの名無しさん
2006/06/07(水) 21:57:54どうやってるの?GetProcAddress?
0543デフォルトの名無しさん
2006/06/07(水) 22:15:270544デフォルトの名無しさん
2006/06/08(木) 01:22:57もしくは、ファイルとフォルダを同一のダイアログで選択→開くできる方法は
ありますか?
ご存知の方がおられましたらお教え下さい。(_ _)
0545デフォルトの名無しさん
2006/06/08(木) 02:37:21無理。
>もし(ry
そのようなダイアログを自分で作る。
0546デフォルトの名無しさん
2006/06/08(木) 02:48:57フォルダの中のファイルを開きたい場合どう操作するんだろう
0547デフォルトの名無しさん
2006/06/08(木) 02:50:580548デフォルトの名無しさん
2006/06/08(木) 10:10:40Windowsのバージョンに依存だったはず。
とりあえずWindows98/2000以降はサウンドカードの種類に依存せず複数再生可能(DirectSoundでミキシング)。
95は無印だとサウンドカードの再生可能チャンネル数依存だったはず。
0549デフォルトの名無しさん
2006/06/08(木) 12:35:460550デフォルトの名無しさん
2006/06/08(木) 13:36:42SHBrowseForFolderで、BIF_BROWSEINCLUDEFILESを指定すればよい。
ただしIE4以上が必要。
0551デフォルトの名無しさん
2006/06/08(木) 18:09:27WINAPIとAPIENTRYがありますが、
どう違うのでしょうか?
0552デフォルトの名無しさん
2006/06/08(木) 18:13:020553デフォルトの名無しさん
2006/06/08(木) 18:27:29552の言うとおりで、それは呼び出し規約の指定。
どちらも最終的には__stdcallになる。
http://www.google.co.jp/search?q=__stdcall+__cdecl&lr=lang_ja
0554551
2006/06/08(木) 19:29:48どうも失礼しました
ありがとうでした
0555デフォルトの名無しさん
2006/06/08(木) 20:27:38プログラムを作りたいのですが、APIを使って実現可能でしょうか?
0556デフォルトの名無しさん
2006/06/08(木) 20:41:31WM_SETTEXTメッセージ送ればいい。
0557デフォルトの名無しさん
2006/06/08(木) 22:06:340558デフォルトの名無しさん
2006/06/08(木) 22:07:56キー入力送ったりとか
0559デフォルトの名無しさん
2006/06/08(木) 22:34:480560デフォルトの名無しさん
2006/06/08(木) 22:35:27誤爆です。失礼
0561デフォルトの名無しさん
2006/06/09(金) 11:51:56ソースとか無いのでしょうか?
0562デフォルトの名無しさん
2006/06/09(金) 11:55:54あるよ。
0563デフォルトの名無しさん
2006/06/09(金) 12:00:590564デフォルトの名無しさん
2006/06/09(金) 12:04:06↑
有るか無いか聞かれてるのに、こんな返事がいいのか?
0565デフォルトの名無しさん
2006/06/09(金) 12:22:12他はおぼえてない
0566デフォルトの名無しさん
2006/06/09(金) 13:12:070567デフォルトの名無しさん
2006/06/09(金) 13:14:300568デフォルトの名無しさん
2006/06/09(金) 13:51:180569デフォルトの名無しさん
2006/06/09(金) 13:56:350570デフォルトの名無しさん
2006/06/09(金) 14:22:520571デフォルトの名無しさん
2006/06/09(金) 14:57:060572デフォルトの名無しさん
2006/06/09(金) 21:56:25いい翻訳サイトはありませんか?
0573デフォルトの名無しさん
2006/06/09(金) 22:17:050574デフォルトの名無しさん
2006/06/09(金) 22:31:02http://booklog.kinokuniya.co.jp/hayase/archives/2006/05/post_50.html
●自分に甘く、他人に厳しい
●努力せずに成果が欲しい
●すぐにいらつき、キレる
●無気力、鬱になりやすい
●「悪い」と思っても謝らない
0575デフォルトの名無しさん
2006/06/09(金) 22:40:28どこかのスレに来てるの?
0576デフォルトの名無しさん
2006/06/10(土) 00:25:29結局最後は自分だけが頼り。
いい翻訳サイト探すよりも、いい辞書サイト探すほうがいいと思うよ。
0577487
2006/06/10(土) 16:52:44やっぱWM_GETMINMAXINFO拾ってLPARAMで渡されるMINMAXINFOを弄るのではなく、完全に
独自処理をしたくなってしまいますた。
タイトルバーをダブルクリックした時の処理を完全に乗っ取る方法があれば教えて下さい。
orz コノトオリ
0578デフォルトの名無しさん
2006/06/10(土) 17:01:530579492
2006/06/10(土) 17:46:30SetWindowsHookEx(WH_GETMESSAGE, ...)でローカルフックを仕掛けて、
WM_NCLBUTTONDBLCLKかつHTCAPTIONな場合に
メッセージをWM_NULLへ変更すれば処理を無効化できる。
これを応用してお好きなように。
0581デフォルトの名無しさん
2006/06/10(土) 18:40:10断片的な日本語資料でがんばってwinプログラミングに慣れてくれば、
そのうち英語msdnも読めるようになる。
0582デフォルトの名無しさん
2006/06/10(土) 19:48:330583デフォルトの名無しさん
2006/06/10(土) 20:17:27socket
gethostbyname
connect
send
recv
shutdown
closesocket
0584デフォルトの名無しさん
2006/06/10(土) 20:21:17CreateWindow()で(0, 0, 100, 100)とかして正方形にしようとしたんですけど、キャプション部があるので正方形になりません。
0585デフォルトの名無しさん
2006/06/10(土) 20:27:34GetSystemMetricsでタイトルバーや枠のサイズを取得してそれをサイズから引く
0586デフォルトの名無しさん
2006/06/10(土) 20:28:59自分も少し前まで必死に悩んでたよ。
0587デフォルトの名無しさん
2006/06/10(土) 20:46:13日本語に翻訳せずにそのまま英語で理解してしまえばおk
いや、マジで。
そんなに難しい文法は使われてないから中学レベルの英語力あれば辞書引きながら読めば読めるはず。
0588487
2006/06/10(土) 20:53:53簡単なのを一つ
1、GetWindowRect()でウィンドウのサイズを求める
2、GetClientRect()でクライアント領域のサイズを求める
3、手順1から手順2の値を引くことで縦横それぞれのクライアント領域「以外」のサイズが求められる
4、自分で調整したいサイズに手順3の結果を加えてMoveWindow();
この方法だとメニューやステータスバーの有無を一々考慮しなくても良いのでオススメ
0589デフォルトの名無しさん
2006/06/10(土) 21:12:190590デフォルトの名無しさん
2006/06/10(土) 23:58:25それらをやってくれるのが>>586な訳だが…
0591487
2006/06/11(日) 00:03:230592デフォルトの名無しさん
2006/06/11(日) 00:13:49クライアント領域の位置とサイズの指定から、その条件を満たすために必要な、
ウィンドウの位置とサイズを計算します。得られたウィンドウの座標は、通常、
CreateWindow 関数でウィンドウを作成するときに使われます。
意味がわからん・・・
0593590
2006/06/11(日) 00:19:300594デフォルトの名無しさん
2006/06/11(日) 00:24:23>>588では大丈夫なのかな?
0595デフォルトの名無しさん
2006/06/11(日) 00:28:55同じ処理を毎回毎回書かなきゃいけない588方式は糞。
単にAdjustWindowRect()を知らなかっただけでしょ。
今度からはAPI使うようにしような。
0596デフォルトの名無しさん
2006/06/11(日) 00:29:12サイズ変更後に折り返しされる事は十分考えられる。
更に>>588ではCreate後にしか計算出来ないから、使い勝手も問題ありだと思うよ。
0597デフォルトの名無しさん
2006/06/11(日) 00:41:06いくら>>588でも、関数化くらいはするんジャマイカ?(w
0598デフォルトの名無しさん
2006/06/11(日) 00:47:53可能性としてメニュー折り返されることは十分考えられる、と言ってるともとれるんだが。
0600デフォルトの名無しさん
2006/06/11(日) 00:53:43588の方法でできない事はAWR()にもできないけど、
588の方法でできる事はAWR()にもできる。
AWR()でできない事は588でもできないけど、
AWR()でできる事は588でもできる。
AWR()の588に対する優位な点は標準APIとして提供されている事。
0601487
2006/06/11(日) 00:56:06>単にAdjustWindowRect()を知らなかっただけでしょ。
知ってて使い勝手悪いから588を書いたワケで、
>同じ処理を毎回毎回書かなきゃいけない588方式は糞。
数行のコードを一つの関数に纏めときゃ済む話なのに?
AdjustWindowRect()使う為引数考えたら588の例の方がマシ
そんなことも理解できない595が糞
>>596
>Create後にしか計算出来ないから、使い勝手も問題ありだと思うよ。
それのどこに問題があるのかわからんが…
CreateWindow前に決め打ちする必然性ってナニ?
hWnd = CreateWindow(); //位置・サイズはCW_USEDEFAULT
588の関数(hWnd);
ShowWindow(hWnd,SW_SHOW);
自分はWindowハンドルだけありゃいつでも使えるので多用してるけどな。
なお折り返しについてはAdjustWindowRect()も事情は一緒。
0602デフォルトの名無しさん
2006/06/11(日) 01:02:56いい加減、ハジの上塗りはやめた方がいいよ?
0603デフォルトの名無しさん
2006/06/11(日) 01:03:49つうか使い勝手を言うなら
AdjustWindowRect使う奴も
関数でラップすればいいだけの話なわけだが
0604デフォルトの名無しさん
2006/06/11(日) 01:06:05ラップせずに使えるモノを、何故わざわざラップするのかと(ry
0605デフォルトの名無しさん
2006/06/11(日) 01:08:27>つうか使い勝手を言うなら
0606デフォルトの名無しさん
2006/06/11(日) 01:08:31ここに書いてある事は間違い?
>AdjustWindowRect関数はこれからウィンドウを作るときにはつかえても
>すでにできてしまったウィンドウの調整には使えません。
0607デフォルトの名無しさん
2006/06/11(日) 01:09:24書かずに実現できる処理を、何故わざわざ自前で書くのかと(ry
0608606
2006/06/11(日) 01:10:16606は忘れてちょ
0609デフォルトの名無しさん
2006/06/11(日) 01:13:58AdjustWindowRectを紹介した上で利点と共に588を紹介ってのなら、まぁ、許せるけど。
1つ気になったんだけど、588を2回やると、1度目で幅がOKで長さがメニュー折り返しで不完全な
状態になって、2回目でメニューの折り返しもOKな状態になりそうに思えるんだけど、気のせい?
0610デフォルトの名無しさん
2006/06/11(日) 01:14:21普通に出来るけどな
0611デフォルトの名無しさん
2006/06/11(日) 01:21:05>AdjustWindowRectを紹介した上で利点と共に588を紹介ってのなら、まぁ、許せるけど。
601だけを読んでも588に利点があるとは全く思えないんで、利点と信じてる点を紹介ってことで。
0612デフォルトの名無しさん
2006/06/11(日) 01:21:44>状態になって、2回目でメニューの折り返しもOKな状態になりそうに思えるんだけど、気のせい?
気のせいではないと思われ
ところでメニューの折り返しの処理のやり方知らない…
メニューバーの文字列の横の長さをどうにかして拾ってなんとかすんの?
0613デフォルトの名無しさん
2006/06/11(日) 01:22:16どんな気持ち?
∩___∩ ∩___∩
♪ | ノ ⌒ ⌒ヽハッ __ _,, -ー ,, ハッ / ⌒ ⌒ 丶|
/ (●) (●) ハッ (/ "つ`..,: ハッ (●) (●) 丶 今、どんな気持ち?
| ( _●_) ミ :/ 588 :::::i:. ミ (_●_ ) | ねぇ、無知晒されるのって
___ 彡 |∪| ミ :i ─::!,, ミ、 |∪| 、彡____どんな気持ち?
ヽ___ ヽノ、`\ ヽ.....::::::::: ::::ij(_::● / ヽノ ___/
/ /ヽ < r " .r ミノ~. 〉 /\ 丶
/ /  ̄ :|::| ::::| :::i ゚。  ̄♪ \ 丶
/ / ♪ :|::| ::::| :::|: \ 丶
(_ ⌒丶... :` | ::::| :::|_: /⌒_)
| /ヽ }. :.,' ::( :::} } ヘ /
し )). ::i `.-‐" J´((
ソ トントン ソ トントン
0614デフォルトの名無しさん
2006/06/11(日) 01:37:220615デフォルトの名無しさん
2006/06/11(日) 01:46:070616デフォルトの名無しさん
2006/06/11(日) 01:48:38結論としては、AdjustWindowRect()を使うようにしろ。
ただ、CreateWindowEx()使う場合にはAdjustWindowRectEx()を
使わなにゃならんから、そこんとこ注意な。
キャプション部が要らない場合はポップアップウィンドウを作るの
がいいと思うぞ。
0617デフォルトの名無しさん
2006/06/11(日) 01:51:34自分も数年前に探したけどなかったよ。。。
その時はメニューの折り返しを考慮した関数を自作したけど、XPのビジュアルスタイルで
破綻して、もう更新してないアプリだったんでそれっきり…。
0618デフォルトの名無しさん
2006/06/11(日) 01:55:401.ウィンドウを作成してからクライアント領域の大きさを取得する。
2.目的のウィンドウの大きさとの差を計算する。
3.差の分だけウィンドウの大きさを変更する。
goto 1.
こんな感じだね。2回ほど繰り返さないといけない。
0619デフォルトの名無しさん
2006/06/11(日) 02:04:29588法x2回だな…
0620デフォルトの名無しさん
2006/06/11(日) 03:34:07WM_NCLBUTTONDBLCLK は、DefWindowProc()に渡さなけりゃ無効化できる。
こんなかんじでできるんじゃね
case WM_NCLBUTTONDBLCLK:
if (HTCAPTION == wParam)
{
// ここでタイトルバーをダブルクリックしたときの独自処理
return 0;
}
DefWindowProc();
0621デフォルトの名無しさん
2006/06/11(日) 03:35:51return DefWindowProc();
0622デフォルトの名無しさん
2006/06/11(日) 05:12:13>>588 はメリットあるだろ?
0623デフォルトの名無しさん
2006/06/11(日) 06:11:01その後心配ならGetClientRectで確認
0624588
2006/06/11(日) 08:56:46>>609
自分は単純に2回繰り返して折り返してまつ。
なおWM_SIZINGでlParam使って同じ事やる場合には2回目のMoveWindowは不要で
1回MoveWindow()したあとDefWindowProc()に渡してやると勝手に直してくれるみたい。
これをやるとWindow枠ドラッグ中にメニューが動的に折り返るようになる。(MoveWindowの第5引数はTRUEで)
#副作用として枠ドラッグ中もWindow内が更新されるけどキニシナイ
自分はこれで十分かと思ってるけどイマイチ自信が無い。他の人のメニュー折り返し部分のコード見たいが。
>>620
579で教えて貰った後でフック無しでもいけるとわかってそれでやってますた。
わざわざマリガトウ。
んじゃ名無しに戻るわ('A`)
0625デフォルトの名無しさん
2006/06/11(日) 09:07:17ないよ。
>>624
1. Adjust〜でサイズ計算
2. 1で計算したサイズでCreate
3. クライアント領域サイズを取得
4. 1の元となるクライアントサイズと3との差を算出
5. SetWindowPosでサイズ変更
0626デフォルトの名無しさん
2006/06/11(日) 09:13:060627デフォルトの名無しさん
2006/06/11(日) 09:24:29メニューあり&横幅が狭くて2行になりそうな場合に 3 4 その結果によっては5
0628デフォルトの名無しさん
2006/06/11(日) 09:30:280629デフォルトの名無しさん
2006/06/11(日) 09:46:06>616
0630デフォルトの名無しさん
2006/06/11(日) 09:49:52ムキにならんでもいいのに
0631デフォルトの名無しさん
2006/06/11(日) 11:17:350632デフォルトの名無しさん
2006/06/11(日) 14:01:34オレの右に出る者は居ない。
0633デフォルトの名無しさん
2006/06/11(日) 14:12:560634デフォルトの名無しさん
2006/06/11(日) 14:20:28ttp://pc8.2ch.net/test/read.cgi/tech/1148297648/
0635デフォルトの名無しさん
2006/06/11(日) 21:55:23こんな感じのタブはどうやって作るんですか?
0636デフォルトの名無しさん
2006/06/11(日) 23:06:12ツールバーがタブに変装している
0637デフォルトの名無しさん
2006/06/11(日) 23:25:22ttp://www.aaaa.co.jp/FOLDER/
というURLがあったとします。
そのFOLDERフォルダ直下のファイル一覧の取得する方法ってありますか?
0638デフォルトの名無しさん
2006/06/11(日) 23:29:300639デフォルトの名無しさん
2006/06/11(日) 23:29:370640デフォルトの名無しさん
2006/06/11(日) 23:31:390641デフォルトの名無しさん
2006/06/11(日) 23:37:260642デフォルトの名無しさん
2006/06/11(日) 23:38:260643デフォルトの名無しさん
2006/06/12(月) 00:24:18Win32APIの話じゃない。
まず、ネットワークについて勉強汁。
その後は、プロトコルについて勉強汁。
0644デフォルトの名無しさん
2006/06/12(月) 00:58:01どのぐらい勉強したら出来ますかね?
0645デフォルトの名無しさん
2006/06/12(月) 01:34:233日〜3年位
0646デフォルトの名無しさん
2006/06/12(月) 02:49:17すんごい幅広いですね
つまり出来ないやつは3年経っても出来ないってことか・・・
0647デフォルトの名無しさん
2006/06/12(月) 03:01:17数十年勉強してHTTPの仕様に関われるぐらい偉くなれば、あるいは……。
0648デフォルトの名無しさん
2006/06/12(月) 08:57:36まずはRFC2616を理解してから出直してくるがいいお(;^ω^)
0649デフォルトの名無しさん
2006/06/12(月) 09:50:160650デフォルトの名無しさん
2006/06/12(月) 12:45:56プロセスのメモリイメージやリソースをそのまま退避・復旧してくれるような物です。
0651デフォルトの名無しさん
2006/06/12(月) 12:47:03ない
0652デフォルトの名無しさん
2006/06/12(月) 12:47:06「出来ない」
ああ、俺って親切。
0653デフォルトの名無しさん
2006/06/12(月) 13:00:030654デフォルトの名無しさん
2006/06/12(月) 18:02:580655デフォルトの名無しさん
2006/06/12(月) 18:12:51ない
0656デフォルトの名無しさん
2006/06/12(月) 20:47:33ShowWindow(hWnd, SW_MAXIMIZE);を実行してもうまく最大化されません。
ウィンドウは画面いっぱいには表示されているが、最大化にはなっていない。という感じです。
なぜでしょうか?また、これを解決する方法はありますか?
0657デフォルトの名無しさん
2006/06/12(月) 20:53:090658デフォルトの名無しさん
2006/06/12(月) 20:59:14CreateWindowする時に最大化状態で作成汁
0659デフォルトの名無しさん
2006/06/12(月) 21:02:190660デフォルトの名無しさん
2006/06/12(月) 21:04:36無理
0661デフォルトの名無しさん
2006/06/12(月) 21:08:06そもそもWM_CREATEはメッセージループ内ではない。
0662デフォルトの名無しさん
2006/06/12(月) 21:08:540663デフォルトの名無しさん
2006/06/12(月) 21:12:140664デフォルトの名無しさん
2006/06/12(月) 22:21:27WM_CREATEの中で何か適当なメッセージを投げて(Postして)おいて、
そのメッセージを受け取ったときに最大化したらどうか?
0665デフォルトの名無しさん
2006/06/12(月) 22:30:140666デフォルトの名無しさん
2006/06/12(月) 22:41:30面白いと思ってやってるのかね
0667デフォルトの名無しさん
2006/06/12(月) 23:00:020668デフォルトの名無しさん
2006/06/13(火) 00:10:26質問側も、内容を一考して書き込め。
0669デフォルトの名無しさん
2006/06/13(火) 11:50:120670デフォルトの名無しさん
2006/06/13(火) 12:45:15GetTopWindow, GetNextWindow
0671デフォルトの名無しさん
2006/06/13(火) 13:19:13の時はリッチエディットが使えて
::LoadLibrary("RICHED20.DLL"); //大文字、小文字色々試したけど無理でした
の時に使えないってことは2.0以降が使えないってことですか?
どうすれば使えるようになりますかorz
0672デフォルトの名無しさん
2006/06/13(火) 13:43:10リッチエディットコントロールは、そのバージョンによってウィンドウクラス名が違うぞ。
1.0 (Riched32)は"RichEdit"だが、2.0以上ではRICHEDIT_CLASSだ。
0673デフォルトの名無しさん
2006/06/13(火) 14:01:18と思って中の"RICHEDIT"の部分を"RICHEDIT_CLASS"に変えてもダメでしたorz
0674デフォルトの名無しさん
2006/06/13(火) 14:10:37○ RICHEDIT_CLASS
0675デフォルトの名無しさん
2006/06/13(火) 14:14:33文字列じゃなくて定数にしなきゃいけなかったのかorz
直した後、RICHEDIT_CLASSがない言われたので、リソースファイルにも#include "Richedit.h"
したら成功しました。
>>672,>>674�d
0676デフォルトの名無しさん
2006/06/13(火) 15:20:46プログラムは終了しないけど、デバッグウィンドウにアクセスバイオレーションがでてて
怖すぎorz
0677デフォルトの名無しさん
2006/06/13(火) 17:49:40もの凄ーく亀レスだけど
WM_SYSCOMMANDのwParamは0xFFF0でAND取らなきゃダメだよ
ttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/userinput/keyboardaccelerators/keyboardacceleratorreference/keyboardacceleratormessages/wm_syscommand.asp
0678デフォルトの名無しさん
2006/06/13(火) 18:07:58書籍にあんまり載ってない・・
0679デフォルトの名無しさん
2006/06/13(火) 18:15:430680デフォルトの名無しさん
2006/06/13(火) 18:53:490681デフォルトの名無しさん
2006/06/13(火) 19:50:15藻前には理解できないから、今の内に辞めた方がいいよ。
0682デフォルトの名無しさん
2006/06/13(火) 20:09:020683デフォルトの名無しさん
2006/06/13(火) 20:11:530684デフォルトの名無しさん
2006/06/13(火) 21:38:52このAPIをGUI付きのMFCアプリケーションから呼び出すと
Aドライブ(フロッピー)の容量取得でディスクが入っていなくても
単純にエラーになるだけですが、
GUI無しのWin32アプリケーションから呼び出すと、ディスクの無い
Aドライブをチェックした瞬間に
「ドライブにディスクがありません。ディスクをドライブA:に挿入してください。」
というメッセージボックスが勝手に出てきてしまいます。
これを出さない方法はありますでしょうか?
0685デフォルトの名無しさん
2006/06/13(火) 21:48:23SetErrorMode()
0686デフォルトの名無しさん
2006/06/13(火) 22:02:05SetErrorMode(SEM_FAILCRITICALERRORS);
で出来ました。ありがとうございます。
MFCはデフォルトでこの状態なんですかね。なんか恐ろしい。
0687デフォルトの名無しさん
2006/06/13(火) 22:26:510688デフォルトの名無しさん
2006/06/13(火) 23:57:250689デフォルトの名無しさん
2006/06/14(水) 00:07:450690デフォルトの名無しさん
2006/06/14(水) 00:23:060691デフォルトの名無しさん
2006/06/14(水) 00:47:260692デフォルトの名無しさん
2006/06/14(水) 01:53:38CreateWindowExでEDITコントロールを貼り付けたんですが、表示されなくて困っています
どうすればよいでしょうか?
0693デフォルトの名無しさん
2006/06/14(水) 02:49:100694デフォルトの名無しさん
2006/06/14(水) 07:24:110695デフォルトの名無しさん
2006/06/14(水) 08:11:24try, catch throw
例外処理
http://pc8.2ch.net/test/read.cgi/tech/1142667446/
template
【初心者歓迎】C/C++室 Ver.28【環境依存OK】
http://pc8.2ch.net/test/read.cgi/tech/1149815331/
0696デフォルトの名無しさん
2006/06/14(水) 14:01:360697デフォルトの名無しさん
2006/06/14(水) 14:02:370698デフォルトの名無しさん
2006/06/14(水) 14:18:12それだけの内容だと「ソースがおかしいんじゃね?」としか言えない。
って言うか、ちゃんと表示する様に指示しているか?
0699デフォルトの名無しさん
2006/06/14(水) 18:25:57処理したいのですが、どうすればいいですか?
ListBoxに LBS_NOTIFY を指定しても、 WM_NOTIFY メッセージが
送られてきていないようなのでちょっと困っています。
# ListViewなら普通に処理できそうなんですけどねぇ。。。
環境はMSVC++2005 ExpressEditionにPlatformSDKいれてやっています。
0700699
2006/06/14(水) 18:50:57WM_COMMAND で捕まえられるんですね。
0701デフォルトの名無しさん
2006/06/14(水) 21:23:05listboxでLBS_NOTIFY指定して、
WM_COMMANDでENTER捕まえることは可能ですか?
上手くいかない・・・
0702デフォルトの名無しさん
2006/06/14(水) 23:01:50現在キーボードエミュレートをするツールを開発しているのですが、キー(ファンクション)
の長押しを実装方法が分からないので質問にきました。
PostMessage(hwnd, WM_KEYDOWN, VK_F1,0)
PostMessage(hwnd, WM_KEYUP, VK_F1,0)
現在はこのようにPostMessage()を並べているのですが、これをどのように書き換えれば
F1キーを長押し(リピート)しているように見せかけられるのでしょうか?
UWSCのスクリプト内では私が求めているような挙動は以下のようにして得られています。
KBD(VK_F1,DOWN,30)
KBD(VK_F1,DOWN,30)
KBD(VK_F1,CLICK,40)
どうぞよろしくお願い致します。
-------------------
使用OS: windowsXP
開発環境:Bccコンパイラ
使用言語:C++
-------------------
0703デフォルトの名無しさん
2006/06/14(水) 23:34:38namespace Win{
#include <windows.h>
}
ってやったら便利かな?
インテリセンスでローカル識別子と一緒にAPI関数がズラズラ入っちゃうのを防げる。
0704デフォルトの名無しさん
2006/06/14(水) 23:50:26それでうまく動いてるんだったら、
PostMessage(hwnd, WM_KEYDOWN, VK_F1,0)
PostMessage(hwnd, WM_KEYDOWN, VK_F1,1)
PostMessage(hwnd, WM_KEYDOWN, VK_F1,2)
PostMessage(hwnd, WM_KEYDOWN, VK_F1,3)
PostMessage(hwnd, WM_KEYDOWN, VK_F1,4)
PostMessage(hwnd, WM_KEYUP, VK_F1,0)
で4回リピート。
0705デフォルトの名無しさん
2006/06/15(木) 00:04:49Win::CreateWindowの名前をリンカが解決できると思う?
0706702
2006/06/15(木) 00:12:00さっそく試してみましたが長押しだと認識しませんでした。
考えられることは
(1)Postmessage()では長押しは実現できない?
(2)Postmessage()以外にキーボードイベントを模索するべき?
(3)その他
このくらいしか思い浮かばないのですがどなたかアドバイスお
願いできないでしょうか?
0707デフォルトの名無しさん
2006/06/15(木) 00:21:020708702
2006/06/15(木) 00:24:29はい。その通りです。以下のサイトにそのように書いてあります。
ttp://wisdom.sakura.ne.jp/system/winapi/win32/win30.html
しかし、実際にはどのように引数としてLPARAMの内容を決定すれば
よろしいのでしょうか?
0709デフォルトの名無しさん
2006/06/15(木) 00:32:25解決してるみたいだけど
0710デフォルトの名無しさん
2006/06/15(木) 00:33:430711デフォルトの名無しさん
2006/06/15(木) 00:33:46そのサイトに書いてあるじゃん
>30ビット目は直前のキーの状態を意味します
>直前に発生したキーイベントが離されたものであれば0
>押された状態のものならば1であり、キーを離した時の状態はつねに1になります
>直前のキーストロークが押しつづけて発生したオートリピートの監視に使えます
>最後の31ビット目は、キーが押されたものであれば0、離されたものであれば1になります
>これは、WM_KEYDOWNでは0、WM_KEYUPなら1になっています
LPARAMの 0-15ビット目をなんか適当な数 30ビット目を1 31ビット目を0
にすりゃいいんでないの?試してないけど
0712デフォルトの名無しさん
2006/06/15(木) 10:46:02(親のウインドウにフォーカスいかなくなるような)
どのように実装したらいんでしょうか?
参考になりそうなソースなどご存じでしたら紹介してください。
0713デフォルトの名無しさん
2006/06/15(木) 10:52:140714デフォルトの名無しさん
2006/06/15(木) 11:38:21CreateDialogは駄目なの?
CreateDialogでダイアログ生成(仮:DialogA)
親WindowをEnableWindowで無効
↓
処理が終わったらDialogAをDestroyWindow()で消去前に
EnableWindow()で親Windowを有効に戻す
俺はこうやってるけど参考にならなかったらシカトしてくれ
0715702
2006/06/15(木) 11:39:31>>710さん
keybd_event()はwindowsXPではSendInput()推奨になっているようですね。
ただSendInput()のサンプルになりそうなプログラムってネットに転がってな
いようですね。。。ちなみにkeybd_event()でも試してみましたが、動作しませ
んでした。
>711さん
PostMessage(hwnd, WM_KEYDOWN, VK_F1, 0x3B0001);
for(int count=0;count<30;count++){
PostMessage(hwnd, WM_KEYDOWN, VK_F1, 0x203B0001);
}
PostMessage(hwnd, WM_KEYUP, VK_F1, 0);
こんな感じでビットの内容を指定したのですが動作しませんでした。
ちなみに走査コードは実際にF1キーを入力したときに確認した値を
代入しています。
まだ考えられる方法はあるでしょうか?
0716デフォルトの名無しさん
2006/06/15(木) 12:10:34その入力先がゲームとかじゃないだろうな。
DirectInputでキー拾ってるアプリだとキーメッセージ投げても反応しないぞ。
0717712
2006/06/15(木) 12:20:33>713、714
表示したいダイアログが、Layerウインドウでアルファーチャンネルを持ったウインドウなんですが、
可能でしょうか?、childで指定でダイアログに貼り付けて、親のダイアログのVisibleをオフにするとか?
何か情報ありましたらお願いします。
0718デフォルトの名無しさん
2006/06/15(木) 12:27:28ATLやMFC(MFCは使ったことが無いけどたぶん)
では、Win32 APIがグローバルな名前空間にあるという前提の元コードが書かれているので、
問題になる。
0719デフォルトの名無しさん
2006/06/15(木) 14:07:490720デフォルトの名無しさん
2006/06/15(木) 14:10:34ウインドウハンドルに対してIsWindowをかけるとか
0721719
2006/06/15(木) 14:27:05できた!
ありがとう!
0722デフォルトの名無しさん
2006/06/15(木) 15:45:40extern "C"が指定されているから、問題ない。
0723デフォルトの名無しさん
2006/06/15(木) 18:36:08そうなんだ。extern "C"するとnamespaceって完全無視なの?
0724デフォルトの名無しさん
2006/06/15(木) 18:52:48HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
の中をのぞくとDisplayName,UninstallStringの2つしかないアプリがありますが
「プログラムの追加と削除」プログラムは該当アプリのアイコンを何の情報を元に取得しているのでしょうか?
0725デフォルトの名無しさん
2006/06/15(木) 19:07:39そういうこと。
だから関数名は問題ない。
でもWinMainとか些細な問題はまだいくつかあるはず。
実際に703のようなことをやってみたことはないから、
俺はほかにどんな問題があるかも知らない。
0726デフォルトの名無しさん
2006/06/15(木) 19:15:46やらない方がいいと思うんだが。
つーか、俺なら叩くなw
0727デフォルトの名無しさん
2006/06/15(木) 23:54:25これだとエミュレートは出来ないと思います。
>>716
>>702を見ると、スクリプトではうまくいくそうだから、
何らかの方法があるはず。
ところで、ファンクションキー以外のキー(例えば A )は上手く行くの?
0728デフォルトの名無しさん
2006/06/16(金) 09:57:18キーボード入力のフェイクは、SendInputでやること。
DirectInputにも対応したかったら、SendInput必須
スキャンコード指定すればDirectInputでもおk。
//keybd_event()でもできないことはないが、ドキュメント化されていないのでお勧めしない
Vistaだと、自分より権限が高いウインドウには、送れないようになるらしいけど。
0729デフォルトの名無しさん
2006/06/16(金) 10:00:54> Vistaだと、自分より権限が高いウインドウには、送れないようになるらしいけど。
HIDフィルタドライバー経由でいけそうな気もしないではないけど…
そこまでやったことないな。
0730デフォルトの名無しさん
2006/06/16(金) 13:37:590731デフォルトの名無しさん
2006/06/16(金) 15:16:050732デフォルトの名無しさん
2006/06/16(金) 17:11:59そうか!だから「98」だったのか
0733デフォルトの名無しさん
2006/06/16(金) 17:20:340734デフォルトの名無しさん
2006/06/16(金) 17:23:530735デフォルトの名無しさん
2006/06/16(金) 17:33:59ドライバ辺りはまったくの素人だからわからないのだけれど、
それをするには管理者権限が必要になるんじゃないのかな?
Vistaは、管理者が実行しても、デフォルトでは一般ユーザ権限で実行されるのだけれど。
権限をしっかり考えていなかったコードが、
必要以上の権限を要求したりしていることがよくあるから、
その辺の互換性は大丈夫なのか心配になるけど。
0736702
2006/06/16(金) 18:09:24>>716さん,>>727さん,>>728さん,>>729さんレスありがとうございます。
>>716さん
入力先はゲーム(DirectX使用)です。DirectInput関数でキーを拾うと反応
しないなんて知りませんでした。他のレスではSendInput()だと拾えるような
ことが書いてありますね。どっちが正しいのか試してみます。
>>727さん
GetAsyncKeyState()ですか。ということは今のところDirectInputとGetAsyncKeyState()
の2種類は物理的に信号を発生させないと無理かもしれないということですね。
ちなみにWM_CHARに関しては入力を正しく受け付けています。
>>728さん
716さん、727さんのおっしゃっている関数でSendInputを拾えるかどうかを確認
してみます。むしろDirectInput()については結論がでているようですが、これも
勉強のうちなので。
>>729
Vistaですか。ますますエミュレートするのが困難になるわけですね。。。
0737デフォルトの名無しさん
2006/06/16(金) 20:07:25ドライバとスクリプト駆動アプリ間の インターフェース DLL を ちゃんと真面目に作れば
スクリプト駆動アプリ はユーザー権限のままでいける
問題は インターフェース DLL をちゃんと作るのが大変っぽいのよね…
0738デフォルトの名無しさん
2006/06/16(金) 22:39:510739デフォルトの名無しさん
2006/06/17(土) 02:29:540740デフォルトの名無しさん
2006/06/17(土) 02:31:41D言語スレがありますので、そちらでどうぞ。
0741デフォルトの名無しさん
2006/06/17(土) 11:22:01サーバーソケット(?)へクライアントが接続したかどうかを知る方法はありますでしょうか?
やりたい事は「***がサーバーに接続しました」と表示することです
よろしくお願いします。
0742デフォルトの名無しさん
2006/06/17(土) 11:39:390743デフォルトの名無しさん
2006/06/17(土) 11:41:56ドライバでも書いとけ。
0744デフォルトの名無しさん
2006/06/17(土) 11:45:370745デフォルトの名無しさん
2006/06/17(土) 12:01:55これでいいんじゃない?
0746デフォルトの名無しさん
2006/06/17(土) 12:22:31そうです
>>743
いや、自プロセスの報です
>>745
>>285
0747デフォルトの名無しさん
2006/06/17(土) 12:32:26それが出来ずにいったいどうやってクライアントの接続を処理してるのか気になる
0748デフォルトの名無しさん
2006/06/17(土) 12:45:33puts("***がサーバーに接続しました");
0749デフォルトの名無しさん
2006/06/17(土) 13:02:46あれ、もしかしてacceptが接続されるまでループしてくれるのかな
おかげ様で解決できそうです、ありがとうございました!
0750デフォルトの名無しさん
2006/06/17(土) 13:13:560751デフォルトの名無しさん
2006/06/17(土) 14:05:13accept
recv
まで書いて実行してみたところ、固まって
んで、接続もされてないのにrecvループしてるのが原因なのかと勘違いして
とりあえず答え求めてgoogle検索して出てきたソースで試してみたところ、やっぱし固まって・・・
(シングルスレッドでやってるソースしか出てきてなかったわけじゃないと思いますが、コードの一部だけをコピペして試してたので)
僕の知識では全然acceptに気づかなくて、どうしようもなく行き詰ってたんです
僕の間抜けさ故に不快にさせてしまって申し訳ないです
#追伸
こうして行き詰った理由を文章に書いたことで僕の間違いを再確認できました、
おかげで少しだけ成長できた気がします。ありがとうございました
0752デフォルトの名無しさん
2006/06/17(土) 17:09:29今後は
マルチスレッドプログラミング相談室 その4
http://pc8.2ch.net/test/read.cgi/tech/1130984585/
ネットワークプログラミング相談室 Port17
http://pc8.2ch.net/test/read.cgi/tech/1148944560/
こちらで質問してください。
2度とこないでください。
0753デフォルトの名無しさん
2006/06/17(土) 17:15:140754デフォルトの名無しさん
2006/06/17(土) 17:16:350755デフォルトの名無しさん
2006/06/17(土) 19:34:56同時発色可能な色数が発色可能な色数より少ない場合に必要なのだ、という事はわかりました。
256色モードだけで必要、と書いてはありますが、しかし、余りに面倒な気がします・・・
こんなプログラミングをどのアプリもやっているのだろうか?
適当に色合わせをしてくれるライブラリとかはないのでしょうか?
0756デフォルトの名無しさん
2006/06/17(土) 19:38:32WinXPは互換モード以外256色なんて使えねーよ?
0757デフォルトの名無しさん
2006/06/17(土) 19:39:43特に今必要じゃなかったらあとで必要になった時にまたやればいい。
0758デフォルトの名無しさん
2006/06/17(土) 19:52:510759デフォルトの名無しさん
2006/06/17(土) 20:03:15で、クラスを登録したいんですが、DEFファイルはどう書いたら良いんでしょうか?
関数と同じではダメなようなのですが・・・VBで使うので、
class __declspec( dllimport ) ClassName
は使えないみたいです。ご教示よろしくお願いします。
0760デフォルトの名無しさん
2006/06/17(土) 20:05:34パレットを使うと、(文字通り)色を調整するのが楽だという理由でパレットカラーの画像フォーマットを採用する場合もある。
#得に典型的な画像フォーマットはxpm。こいつはテキストでもありCソースの一部としても使える。
いずれにしても、このスレ的には忘れていい。
#逆に言えば、これ以上の話はスレ違い。
0761デフォルトの名無しさん
2006/06/17(土) 20:06:35俺なんか一度も使ったこと無いけど。
0762デフォルトの名無しさん
2006/06/17(土) 20:28:17Delphi Graphic Secretsでも読めよ。もう廃刊になってるかもしれんけど
いい本だよ。
0763デフォルトの名無しさん
2006/06/17(土) 20:29:200764デフォルトの名無しさん
2006/06/17(土) 20:29:39隙間の幅を指定できますか?
0765デフォルトの名無しさん
2006/06/17(土) 20:31:39EM_SETMARGIN
0766デフォルトの名無しさん
2006/06/17(土) 20:43:36VBからクラスの形で使いたければActiveXでないといけない。
0767デフォルトの名無しさん
2006/06/17(土) 20:54:07できました!ありがとうございます
0769デフォルトの名無しさん
2006/06/17(土) 21:00:15そうなんですか、関数でラッピングする方向で考えてみます
ありがとうございました
0770デフォルトの名無しさん
2006/06/17(土) 21:29:570771デフォルトの名無しさん
2006/06/17(土) 22:38:17SetWindowAttributeLayeredなんちゃら
0772デフォルトの名無しさん
2006/06/17(土) 22:40:560773デフォルトの名無しさん
2006/06/17(土) 23:34:06// STOPボタンが押された時
HANDLE handle = Thread->GetHandle();
Thread->Stop();
WaitThread( handle, INFINITE );//WaitForSingleObjectのラップ
CloseHandle( handle );
なんてコードをGUIスレッド側で書いてるのですが、
たまにスレッドの終了に時間がかかってGUIが固まってしまうときがあります。当たり前ですが。
なので、どのようにスレッドの終了を待って、クローズすればいいのか
教えてください。
というか、一々WaitForSingleObjectで待ってなくて、CloseHandleで閉じても
いいのでしょうか?
0774デフォルトの名無しさん
2006/06/17(土) 23:46:35スレッドの終了処理を必要としないならばTerminateThreadとかで強制終了しても構わない。
メモリ解放とか終了処理があるのならば、普通はスレッドのクラスに「割り込みフラグ」を持たせておいて、
スレッドの処理内部で常にその「割り込みフラグ」がtrueに設定されたか監視するようコードを書き、
スレッドを生成した側で「割り込みフラグ」にtrueを設定して終了を通知する。
まあJavaのThreadの仕組みなんだけど参考にするといいと思う。
0775デフォルトの名無しさん
2006/06/17(土) 23:47:45後者はMFCでも行われている。
0776デフォルトの名無しさん
2006/06/17(土) 23:57:33スレッドの終了処理を必要としないならばTerminateThreadとかで強制終了しても構わない。
Cのランタイムライブラリを一切使わないおつもりでしょうか?
0777デフォルトの名無しさん
2006/06/18(日) 00:06:53待つなら、MsgWaitFor〜の待機関数かタイマ。
タイマは使えない場合も有り
0778デフォルトの名無しさん
2006/06/18(日) 00:12:47>>775でも言っているけど、
あるスレッドハンドルに対してCloseHandleすると、
そのスレッドまで終了すると信じていたのは自分だけじゃないよな?
いや、Advanced Windowsにも書かれていたから、結構な人がそう信じているんだろうけど。
0779774
2006/06/18(日) 00:18:39あらっ、なんかやっぱりスレッドの強制終了ってヤバカッたの?
そこら辺までは詳しく知らなかったです。
スレッド処理で、終了時に外部ファイルなどに状態を保存しておかないと、
次の起動時に不都合がでるようなアプリ以外では、
普通にスレッドの強制終了してもよいかとオモテました。
0780デフォルトの名無しさん
2006/06/18(日) 00:46:44ttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/terminatethread.asp
>If the target thread owns a critical section, the critical section will not be released.
>If the target thread is allocating memory from the heap, the heap lock will not be released.
>If the target thread is executing certain kernel32 calls when it is terminated, the kernel32 state for the thread's process could be inconsistent.
>If the target thread is manipulating the global state of a shared DLL, the state of the DLL could be destroyed, affecting other users of the DLL.
相当危険だな。
0781デフォルトの名無しさん
2006/06/18(日) 01:25:03スレッドが実行中でも、ハンドルを使わなければ閉じて構わないんですね。
この方法使います。
0782デフォルトの名無しさん
2006/06/18(日) 01:28:20質問の答えとしては>>777かな
0783デフォルトの名無しさん
2006/06/18(日) 03:31:20参考にしたいです
0784デフォルトの名無しさん
2006/06/18(日) 03:47:45【参考】ソースを公開しているWindowsプログラム
http://pc8.2ch.net/test/read.cgi/tech/1115206132/
0785デフォルトの名無しさん
2006/06/18(日) 10:54:41Windowsアプリのプログラム経験ないならSDKのgeneric.c
0786デフォルトの名無しさん
2006/06/18(日) 23:21:23ツールバーのボタンに設定するとき、どのようにしてビットマップの背景を透過させるとよいでしょうか。
0787デフォルトの名無しさん
2006/06/19(月) 15:18:35適当な透過色を設定したImageListを用いて、TB_SETIMAGELISTで
ボタンイメージを設定する。
0788デフォルトの名無しさん
2006/06/19(月) 16:59:580789デフォルトの名無しさん
2006/06/19(月) 17:17:31VC++2003.netにてWin32プロジェクトを作成し、ダイアログボックスを設置、そのダイアログボックス上にリストビューコントロールの
Viewをレポート、Edit labelsをtrueにして配置しウィンドウを作成、リストビューにアイテムを適当に挿入してアイテムの内容を編集
しようとして文字を追加入力、又は消去した瞬間にダイアログボックスが落ちてしまいます。ちなみにアプリは無事で、エラーは出ません
たまにアサートが出ますがどうやらメッセージ処理関数内で何かが起こっている模様です
上記の行為を通常のウィンドウ上に作成したリストビューコントロールで行っても特に問題はありません
また、WTLを使用して行った場合も同じ状況になります
ただし、MFCを使用した場合だとウィンドウ、ダイアログ上ともに問題なくラベル編集できます
現状でMFCを使用しない状態でダイアログボックス上のリストビューコントロールのアイテムのラベル編集は出来ないのでしょうか?
0790789
2006/06/19(月) 17:28:150791デフォルトの名無しさん
2006/06/19(月) 18:40:390792デフォルトの名無しさん
2006/06/19(月) 23:17:390793デフォルトの名無しさん
2006/06/19(月) 23:20:190794デフォルトの名無しさん
2006/06/19(月) 23:32:36└┘
0795デフォルトの名無しさん
2006/06/19(月) 23:34:58そこまで分かってるならステップ実行でもして何処でなにが起こってるのか調べれ
0796デフォルトの名無しさん
2006/06/20(火) 00:09:120797デフォルトの名無しさん
2006/06/20(火) 00:10:28そのうち分かってくるからいいんだけどね
0798デフォルトの名無しさん
2006/06/20(火) 00:27:43一生懸命ステップ実行してハマる奴もいるからなぁ
0799789
2006/06/20(火) 02:23:32ステップ実行というか、エラーが出ているのが自作関数とかではなくモジュール内なので、アセンブラになってしまうんですよ
ダイアログプロシージャーを抜けた先だかで例外で落ちてるらしく
NULLでのメモリアクセスエラーにしても、何がNULLなのやら……
やってることと言えば、もう、ただ新規でプロジェクト作成してダイアログ作成前にInitCommonControlsやってWM_INITDIALOG内でカラムとアイテムを挿入してるだけなんですけどね……
あ〜、ちゃんとcommutil.hインクルードしてcomctl32.libリンクしてます
もう、ほんと、何で駄目なんだろう……
0800デフォルトの名無しさん
2006/06/20(火) 02:37:27まあ、それは知ってるのにできないから、訓練不足でしょ。
おれが言いたいのは、知らないとどうしようもないってこと。
0801仕様書無しさん
2006/06/20(火) 04:10:47に対して、プログラム中でファイルの所有権を一時的に取得して、ファイル
アクセスした後、所有権を解除(元に戻す)したいんですが、とっかかりが
なくて困ってます。SECURITY_ATTRIBUTE構造体あたりが関与してそうな気も
しますが、どのAPIを使ったらいいんでしょうか?ググってもいまひとつ、
ヒットしなくて。
プログラムを実行したユーザーは、Administrator等、所有権を変更する
権限がある状態と仮定します。プログラムを実行したユーザーに、ファイル
の所有権を変更する権限があるかどうか調べるAPIってのはあります?
0802デフォルトの名無しさん
2006/06/20(火) 06:59:100803デフォルトの名無しさん
2006/06/20(火) 12:31:39エラーが出てるという関数の引数はチェックしたよね?
0804798
2006/06/20(火) 13:37:17エラーが出てるという関数自体はDialogBoxなんですよ、設定しているDialogProc関数の処理はWM_INITDIALOG以外のメッセージは全部FALSE返すようにしていて、初期化処理の中身はリストビューコントロールへのアイテムとカラム追加処理のみです……
それ以外はプロジェクト作成時からいじっていないんです……あ、InitCommonControlsは入れましたが
ちなみにカラムの追加は
HWND hWndList = ::GetDlgItem(hDlg, IDC_LIST);
LVCOLUMNLvCol;
::memset(&LvCol, 0, sizeof(LVCOLUMN));
LvCol.mask = LVCF_TEXT | LVCF_FMT;
LvCol.pszText = _T("名前");
LvCol.fmt = LVCFMT_LEFT;
::SendMessage(hWndList, LVM_INSERTCOLUMN, 0, reinterpret_cast<LPARAM>(&LvCol));
という処理で、アイテムの追加は
LVITEM LvItem;
::memset(&LvItem, 0, sizeof(LVITEM));
LvItem.mask = LVIF_TEXT;
LvItem.iItem = 0;
LvItem.iSubItem = 0;
LvItem.pszText = _T("てすと");
LvItem.state = 0;
LvItem.stateMask = 0;
LvItem.iImage = 0;
LvItem.lParam = 0;
::SendMessage(hWndList, LVM_INSERTITEM, 0L, reinterpret_cast<LPARAM>(&LvItem));
という処理で行ってます……何がいけないんだ
ちなみにWTL使用してる方ではリストビューコントロールをサブクラス化してリストビューのメッセージ処理にREFLECT_NOTIFICATIONSを加えたら動きましたorz
0805801
2006/06/20(火) 14:27:40即レスどうもです。どうやら、そのようですね。ありがとうございました。
0806デフォルトの名無しさん
2006/06/20(火) 15:16:52拾ったwin32のサンプルでラベル編集してみたけど特に問題なく動いたよ
0807798
2006/06/20(火) 16:33:54わざわざありがとうございます
あうぅ、何がいけないんだろう
……あ、何処で拾ったか教えていただけますか? ソース見てみたいです
0808デフォルトの名無しさん
2006/06/20(火) 21:07:37DHCPをEnableに設定するWin32APIをご存知ありませんでしょうか?
PlatformSDKのIPHelperAPIを探しても
renew/releaseなどしか見つかりませんでした。
0809デフォルトの名無しさん
2006/06/21(水) 01:46:18Win32APIなど使って、確認するには、どういう手段を使えば良いでしょうか?
・NICが装着されてる
・IPアドレスが割り当てられてる
の確認くらいは思いつくけど、その先が...
強引にパケット出して、自動ダイアルアップ環境にあるPCで、
ダイアルアップをさせることは避けたい。
というのがあるので、何か良い方法ないですかね。
できれば、ダイアルアップ・ルータの自動接続もさせたくないです。
で、インターネットに繋がっているときだけ、ちょちょっとデータ転送したい。
0810デフォルトの名無しさん
2006/06/21(水) 02:21:41あるいはping打ってみるとか。
0811デフォルトの名無しさん
2006/06/21(水) 02:34:56・グローバルIPが振られていたらインターネットに
つながっっていると見なす
・ルータとお話するには
・UPnP
・機種限定で汚い方法でいいなら設定画面解析など
・ルーティングプロトコルで話をする
ごめん、よくわからねえ。
0812デフォルトの名無しさん
2006/06/21(水) 02:43:05ping 打ったらダイアルされてしまいますが?
0813デフォルトの名無しさん
2006/06/21(水) 02:51:03という状況はPCからは確認のしようがない。
ルータの管轄だからな。
つまり>>810が一番確実な手段。
0814デフォルトの名無しさん
2006/06/21(水) 03:05:16>強引にパケット出して、自動ダイアルアップ環境にあるPCで、
>ダイアルアップをさせることは避けたい。
>というのがあるので、何か良い方法ないですかね。
>できれば、ダイアルアップ・ルータの自動接続もさせたくないです。
こんな制限付けたら調べようがないと思うけどなんで?
電話代の問題?
>で、インターネットに繋がっているときだけ、ちょちょっとデータ転送したい。
スパイウェアでも作るつもりですか?
0815809
2006/06/21(水) 05:27:55できるようにしようかと思って。
でも、そのためにダイアルアップ環境で使ってるような場合に、
インターネットに繋いでしまうようなことまではやりたくない。
という事なんだけど、考え出すと、なかなか妙案が浮かばなくて。
例えば、IEなと他のソフトが、今インターネットアクセスしてるかどうか
調べるような方法があるかとか。
確実に常時接続環境だということが判別できる方法はないかとか。
0816デフォルトの名無しさん
2006/06/21(水) 05:38:060817デフォルトの名無しさん
2006/06/21(水) 06:04:16自動チェックする、しないをユーザーが選択できる。
0818デフォルトの名無しさん
2006/06/21(水) 08:43:49ユーザが自動チェックすることを選んだなら、
ダイアルアップ使っても問題なさそうだし
0819デフォルトの名無しさん
2006/06/21(水) 11:49:23モードレスダイアログを作ってそこで別スレッドで長い処理をやらせて内容を表示させています。
処理が終わる前に先に進まれると困るので本体でWaitForSingleObjectで
スレッドが無くなるまで待つようにするとフリーズしてしまいます。
どうやら原因はWaitForSingleObjectで止めるとモードレスまで止まってしまうのでスレッドの内容が
モードレスに反映されないみたいなんだけど、モードレスだけ動かすことはできませんか?
0820デフォルトの名無しさん
2006/06/21(水) 12:07:200821デフォルトの名無しさん
2006/06/21(水) 12:11:160822デフォルトの名無しさん
2006/06/21(水) 12:15:500823デフォルトの名無しさん
2006/06/21(水) 12:29:00スレッドの処理が終わったら、スレッドからメッセージを投げればいい。
0824798
2006/06/21(水) 12:47:04上記ソースに間違いが無いと思うんですけど……
何故落ちるのか意味が本当に分かりません。あぅぅ
0825デフォルトの名無しさん
2006/06/21(水) 12:50:48まず何所で落ちるのか調べろ。話はそれからだ。
0826デフォルトの名無しさん
2006/06/21(水) 12:51:45> LvItem.pszText = _T("てすと");
これ、リテラル止めてみたら?
0827デフォルトの名無しさん
2006/06/21(水) 12:55:53試しにコンパイルしてみたが別に落ちないぞ?
0828デフォルトの名無しさん
2006/06/21(水) 18:38:26FindWindowに渡すための第二引数を取得したいのですがいい方法が見付かりません。
よろしくお願いします。
0829デフォルトの名無しさん
2006/06/21(水) 18:43:06これくらい自分で調べろバカ
0830デフォルトの名無しさん
2006/06/21(水) 18:44:20FindWindowsはウィンドウクラス名分かってる場合はウィンドウキャプション省略できるぞ。一応。
0831828
2006/06/21(水) 18:47:17バカで申し訳ない。でもおかげ様で思った通りにできそうです。ありがとうございました。
>>830
クラス名はわかっているのですがありがちな名前すぎて話にならないのです。
0832デフォルトの名無しさん
2006/06/21(水) 18:47:59FindWindow に渡すための ウインドウ Caption を調べるために GetWindowText を利用する
なんか矛盾しているようないないような
# GetWindowText できてるなら FindWindow する必要がないようにも見えるが・・・
>>828
FindWindow( class_name_string, NULL) じゃだめなのか?
0833828
2006/06/21(水) 18:53:060834デフォルトの名無しさん
2006/06/21(水) 18:53:47ラベル編集のときにwParam=0x01000000がくるときがあるが、
wParamのLOWORDが0になるときってどんなときか知ってる?
0835デフォルトの名無しさん
2006/06/21(水) 18:54:31どうやってウィンドウを特定するつもりだったんだw
0836デフォルトの名無しさん
2006/06/21(水) 18:54:48そこまで探しにくいのならEnumWindowsで調べた方が早いと思う。
実行ファイル名が分かってるならProcess32First/Next回してプロセスID取得>EnumWindowsで帰ってくるハンドルをGetWindowThreadProcessIdに突っ込んでターゲットのプロセスIDと比較とか。
0837828
2006/06/21(水) 18:57:54そうですよね。対象がないですよね('A`)
>>836
なんかよくわからない横文字がたくさん並んでいるみたいですが調べてみます。
ありがとうございました。
0838デフォルトの名無しさん
2006/06/21(水) 21:57:30それがNotifyコード送ってきてた。
さらにラベル編集時にListViewが作ったであろうIDが1のコントロールから
Notifyが送られてくるから、IDOKの処理が行われてしまう。
だからボタンのIDにIDOKを使わなければダイアログは終了しない。
0839デフォルトの名無しさん
2006/06/22(木) 10:42:47テキスト以外にもオブジェクトとかも含まれてるんで困ってます。
0840デフォルトの名無しさん
2006/06/22(木) 11:04:160841789
2006/06/22(木) 11:10:52>838
うわっ、うわっ、うわっ、動きましたっ
ありがとうございます
うう、Windowsアプリのデバッグ(メッセージ関係)はブレークポイントの掛け処が難しいです……
もっと精進しまする〜
0842デフォルトの名無しさん
2006/06/22(木) 11:45:11ありがとうございます。
これから各フォーマットについて調べてみます。
0843デフォルトの名無しさん
2006/06/22(木) 21:27:48WordなんかはOLE使っているからOleGetClipboard()で
IDataObjectへのポインタを得ればどんな形式でも平気だと思う。
ところでシェルスクラップオブジェクト(拡張子shs)は、IDataObjectをファイル化したものだと俺は思っているんだ。
つまり何らかの方法でIDataObjectをシェルスクラップとして書き出す方法があるに違いないと思っている。
そうしたら(OLE対応のデータなら)どんな形式でも書き出せるようにできるはずだと思う。
0844デフォルトの名無しさん
2006/06/23(金) 10:15:23まとめたいのですが構わないでしょうか?
0845デフォルトの名無しさん
2006/06/23(金) 10:45:20是非お願いします
0846デフォルトの名無しさん
2006/06/23(金) 12:18:44わんわわわん わん!
(もちろん、アリフェイトで小銭をかせいじゃだめだよ)
0848デフォルトの名無しさん
2006/06/23(金) 12:32:29WinXP SP2でbind()したときにセキュリティの警告ダイアログが表示されます。
このダイアログを、最初から出ないようにする方法はありませんか?
ご存知の方がいらっしゃいましたらご教示ください。
0849デフォルトの名無しさん
2006/06/23(金) 12:37:32ウィルスが勝手にポート開こうとしたときに警告でなかったら意味ないと思わないかね
少なくとも正攻法ではナイ
0850デフォルトの名無しさん
2006/06/23(金) 12:39:070851デフォルトの名無しさん
2006/06/23(金) 12:45:41ない
0852デフォルトの名無しさん
2006/06/23(金) 12:59:25賢い奴はクリックしないのでは?
0853848
2006/06/23(金) 13:12:160854852
2006/06/23(金) 13:17:470855デフォルトの名無しさん
2006/06/23(金) 13:37:170856844
2006/06/23(金) 13:52:49とりあえず作ってみたのですが
http://winapi.seesaa.net/
こんな感じでもかまいませんか?
0857デフォルトの名無しさん
2006/06/23(金) 14:11:160858デフォルトの名無しさん
2006/06/23(金) 14:24:370859デフォルトの名無しさん
2006/06/23(金) 14:40:140860デフォルトの名無しさん
2006/06/23(金) 14:42:03スレへのリンクもつけた方がいいんじゃない?
http://pc8.2ch.net/test/read.cgi/tech/1148005509/856
こんな感じでレス番までつけて。
http://pc8.2ch.net/test/read.cgi/tech/1148005509/856-860
質問から回答に至るまでに意義ある論議があったりすれば、この方がいいかも。
0863デフォルトの名無しさん
2006/06/23(金) 15:18:27HTML化されている時はどうするの?
http://pc.2ch.net/tech/kako/991/991576947.html#130-150
か
http://pc.2ch.net/test/read.cgi/tech/991576947/130-150
こんな感じでやるの?
0864デフォルトの名無しさん
2006/06/23(金) 15:30:02改行ってどうするんですか?
0865デフォルトの名無しさん
2006/06/23(金) 15:32:01があるから >>844 にはそれをすべてHTML化してそれにリンクを
貼ればいいのでわ?
全部できたらアフィも(ry w
0866デフォルトの名無しさん
2006/06/23(金) 15:39:20WriteFileに改行なんて概念は無いよ。
何で表示してるか知らんが、その表示するアプリで改行されるようなデータ書き出せばいいよ。
0867デフォルトの名無しさん
2006/06/23(金) 15:53:340868デフォルトの名無しさん
2006/06/23(金) 15:55:41ありがとうございます!
0870デフォルトの名無しさん
2006/06/23(金) 17:15:12乙かれさん。
0871デフォルトの名無しさん
2006/06/23(金) 21:12:17を表示するにはどうしたら良いんでしょうか
0872デフォルトの名無しさん
2006/06/23(金) 21:41:07WS_VSCROLL
ES_AUTOHSCROLL
ES_AUTOVSCROLL
0873デフォルトの名無しさん
2006/06/23(金) 23:11:11ttp://www.microsoft.com/japan/technet/prodtechnol/winxppro/maintain/sp2netwk.mspx#ENHAE
> 1 つまたは複数のポートでリッスンするアプリケーションが管理者によってインストールされる際、
> ユーザーは、アプリケーションがファイアウォール内でポートを開くことを許可するかどうかを示す
> 必要があります。
この辺かな。
0874デフォルトの名無しさん
2006/06/24(土) 00:29:13文字を表示させたいのですが、そういうことは可能なのでしょうか。
WORD wAttributes;
CONSOLE_SCREEN_BUFFER_INFO csbi;
hStdout = GetStdHandle(STD_OUTPUT_HANDLE);
GetConsoleScreenBufferInfo(hStdout, &csbi);
wAttributes = FOREGROUND_GREEN;
SetConsoleTextAttribute(hStdout, wAttributes);
printf("wAttributes = %d\n", wAttributes);
↑こんな感じのコードを入れましたが、うまく動きませんでした。
0875デフォルトの名無しさん
2006/06/24(土) 01:05:28mainなどから始まるプログラムでなければ、
AllocConsoleを呼べばコンソールが現れる。
ただし、printfは無理だと思う。
逆にmainから始まるようにすればprintfも問題なく使える。
0876デフォルトの名無しさん
2006/06/24(土) 01:13:12editbin /SUBSYSTEM:CONSOLE xxxx.exe でいけた記憶があるな。
0877848
2006/06/24(土) 01:56:42どうもありがとうございます。
まだ詳しく参照していないのですが、管理者権限を持つユーザーが実行している条件下で
INetFwAuthorizedApplicationsを使用することにより、セキュリティの警告なしにポート
を空けて独自プロトコルを動作させることはできそうですね。
しかし、
「アプリケーションは、自分自身を INetFwAuthorizedApplications コレクションに追加
する前に、ユーザーの同意を得る必要があります。」
とありますので、同意を得ずにポートをあけるのは問題があるでしょうね。
やりたいことは、アプリケーションが同一のセグメント上で複数動作するの
を抑えたいだけなので、できれば警告などは無いのが望ましいのです。
他の方法が無いか探って見ます。
しかし、トロイの木馬がこのインターフェースを使用してポートを空けることができてし
まうということなるのか、よく考えたらおそろしい・・・
0878デフォルトの名無しさん
2006/06/24(土) 02:08:010879デフォルトの名無しさん
2006/06/24(土) 07:59:06cのライブラリにもstdout設定する必要があると思うけどやった?
最近javaとかc#ばっかで何て関数かわすれた。
0880デフォルトの名無しさん
2006/06/24(土) 11:09:42WS_POPUPなwindowを
case WM_NCHITTEST:return HTCAPTION;
見たいな感じで動かせるようになったのですが
上方向の画面外に移動させようとすると画面内に戻されてしまいます。
どうすればいいか教えてください。
0881デフォルトの名無しさん
2006/06/24(土) 15:52:191. RegisterClass() / g_hWndMain = CreateWindow("MyClass")
2. CoCreateInstance(CLSID_..., IID_IOleObject, &pOleObject)
3. pOleObject->SetClientSite(...) : コントロールに親ウィンドウのハンドルg_hWndMainを取得する手段を提供。
4. pOleObject->QueryInterface(IID_IOleInPlaceObject, &pOleinPlaceObject)
5. pOleinPlaceObject->SetObjectRects(...) : コントロールに親ウインドウの矩形と自分(コントロール)に割り当てられた矩形を教える。
ここまででコントロールに窓を表示する為の情報は教えたと思うのですが、表示できません・・・OrZ
ちなみにWebBrowserコントロールだとここまでで窓(非表示)が生成されるので、この後に無理矢理
pOleObject->QueryInterface(IID_IOleWindow, &pOleWindow);
pOleWindow->GetWindow(&g_hWndWBC)
ShowWindow(g_hWndWBC, SW_SHOW);
すればコントロールらしき白い空白が表示されます。(MyClassの背景は暗くしておく)
でもこれだけではこのコントロールはまともに使えないみたい・・・
それに他のActiveXコントロール(VB5CCEで自作)ではなぜかpOleObject->EnumVerbs()しないと窓が生成されないし(でもサイズは0)、g_hWndMainの子ウィンドウにならない・・・
OLEスレはあるんですが、余りに効率が悪いのでSDKレベルでOLEをやっている人はあまり居ないみたいです。
0882デフォルトの名無しさん
2006/06/24(土) 15:56:400883デフォルトの名無しさん
2006/06/24(土) 15:59:29マニュアル調べてMTセーフかどうかいちいち確認しろ。
0884デフォルトの名無しさん
2006/06/24(土) 17:09:02Visual C++ならATL::CAxWindow使えばいいと思うよ。
そうでなければ、これが参考になると思うよ。(ただしこれも結局ATL使っている)
http://www.nitoyon.com/vc/tips/ie_component.htm
0886おか
2006/06/25(日) 00:19:00OnQueryEndSessionでログオフ/電源を切る/再起動を判別する方法知ってる?、
Win2000ではレジストリで取得できたのに。
0887デフォルトの名無しさん
2006/06/25(日) 08:17:35回転させたいときはPlgBlt関数でOK?
0888デフォルトの名無しさん
2006/06/25(日) 12:48:53freopen("CONOUT$", "w", stdout);
0889デフォルトの名無しさん
2006/06/25(日) 13:52:28入力する。方法は無いでしょうか?
CreateProcessである必要は無いのですが、EXEの起動はWinExecとこれくらいしか
知らないので、他にもあるならお願いします。
0890デフォルトの名無しさん
2006/06/25(日) 13:58:290891デフォルトの名無しさん
2006/06/25(日) 15:21:44cmd /c tar -cf hoge.tar hoge0.txt hoge1.txt
0892874
2006/06/25(日) 15:27:22ありがとうございます。
無事printf関数で出力できるようになりました
0894889
2006/06/25(日) 16:06:12>>890
>>891
のおかげで出来るようにはなりました。
あつかましいですが、コマンドプロンプトにコマンドラインオプションを入力した
結果を表示って出来るのでしょうか?
例えば(ソフトによって違いますが)「○○処理は完了しました。」などを
CreateWindow("Edit"〜〜とかに反映させるとか、可能ですか?
出来るのであればお願いします。
0895デフォルトの名無しさん
2006/06/25(日) 16:08:470896デフォルトの名無しさん
2006/06/25(日) 16:08:590897デフォルトの名無しさん
2006/06/25(日) 16:18:180898889
2006/06/25(日) 17:05:03コンソールアプリという訳ではないのですが、結果的にはそれに近いかも知れません。
一応質問の前にConsole関係も調べたのですが、どうやら理解をしていなかった
ようです。リンク先大変参考になります。
>>895
>>896
>>897
どうもありがとうございました。これでなんとかなりそうです。
0899デフォルトの名無しさん
2006/06/25(日) 23:07:54画面をキャプチャできる方法はありますか
0900デフォルトの名無しさん
2006/06/25(日) 23:13:140901デフォルトの名無しさん
2006/06/25(日) 23:33:280902デフォルトの名無しさん
2006/06/26(月) 00:11:460903899,901
2006/06/26(月) 00:12:110905デフォルトの名無しさん
2006/06/26(月) 00:14:330906デフォルトの名無しさん
2006/06/26(月) 00:32:320907デフォルトの名無しさん
2006/06/26(月) 00:46:270908デフォルトの名無しさん
2006/06/26(月) 03:41:475コマぐらいはいけるかも。
0909デフォルトの名無しさん
2006/06/26(月) 06:10:01http://developer.nvidia.com/object/sdk_home.html
0910デフォルトの名無しさん
2006/06/26(月) 08:56:58なんでその程度の知識しか無いのにEEなんて持ってるの?
割れ厨ですか?
0911デフォルトの名無しさん
2006/06/26(月) 09:16:15EE = Express Edition
最上位はTeam System
0912デフォルトの名無しさん
2006/06/26(月) 10:23:33・配列に色の値を持たせておいて、色を使う。
この2つの違いが分かりません。
同じことをしているのではないかと思うのですが…。
0913デフォルトの名無しさん
2006/06/26(月) 10:58:52ちがうよ
LUTとかADCでぐぐってみな
0914デフォルトの名無しさん
2006/06/26(月) 11:22:56Editコントロールの右クリックメニューに、独自のコマンドを追加するにはどうしたらいいでしょうか。
WM_INITMENUPOPUPは来ないし、WM_CONTEXTMENUだと一から作ることしかできないし。
0915デフォルトの名無しさん
2006/06/26(月) 11:50:170916449
2006/06/26(月) 12:58:53下記のようなソースで試した結果、ロックを判定できました。
> while( 1 )
> {
> Sleep( 3000 );
> hDesk = OpenInputDesktop(0, FALSE, 0);
> if( GetUserObjectInformation( hDesk, UOI_FLAGS, &UserObjFlg, sizeof( UserObjFlg ), &WriteByte ) ) {
> puts( "ロック中ではありません。" );
> } else {
> puts( "ロック中です。" );
> }
> }
0917デフォルトの名無しさん
2006/06/26(月) 20:44:09この手のアプリは一から頑張って作ってるに一票
0918デフォルトの名無しさん
2006/06/26(月) 20:52:46ありがとうございます!
BCCだけで何とかするように頑張っている訳ですが、きっと参考になると思います!
しかし何でこの部分「Platform SDK: COM」文書はウヤムヤな事しか書いていないのか・・・
で、一応報告。
まだまだゴソゴソやってるんですが、自作コントロールの場合、
1. RegisterClass() / g_hWndMain = CreateWindow("MyClass")
2. CoCreateInstance(CLSID_..., IID_IOleObject, &pOleObject)
3. pOleObject->EnumVerbs() // 取得したポインタはそのまま捨てる(Release)
4. pOleObject->QueryInterface(IID_IOleWindow, &pOleWindow);
5. pOleWindow->GetWindow(&g_hWndWBC)
6. SetParent(g_hWndCtrl, g_hWndMain); // 無理矢理子ウィンドウに(^^;)
7. ShowWindow(g_hWndWBC, SW_SHOW); // 表示
8. メッセージループ突入
こんなやり方で、一応表示されているように見えます。コントロールに搭載されているボタンに結びつけられたOnClickプロシージャもちゃんと動作しているように見えます。
このコントロールに限りこれで使える事は使えるのかも。
しかし、WebBrowserコントロールにはこのやり方は通用しない・・・WebBrowserはEnumVerbs()してもウィンドウは生成されない。
どのコントロールでも使える正しい方法はどういうものなのだろうか?
というかそもそもEnumVerbs()して何で生成されるかワケがわからない・・・
0919デフォルトの名無しさん
2006/06/26(月) 21:25:02この辺はもう読んでるんですよね。
コンテナには結構 Required (必須) のインタフェイスがありますよ。
http://msdn.microsoft.com/library/default.asp?url=/workshop/components/containers/overview/containers.asp
0920デフォルトの名無しさん
2006/06/27(火) 01:31:27この図のように、キーボードの「A」を打つと、それを別のソフトに「A」「B」「C」「D」という入力を
等時間間隔で送る、というような入力支援ソフトをつくりたいと思っています。
そこで、他のソフトへ入力を送る手段を教えてほしいです。
0921デフォルトの名無しさん
2006/06/27(火) 07:02:110922914
2006/06/27(火) 11:00:14回答してくれた方、ありがとうございました。
0923デフォルトの名無しさん
2006/06/27(火) 13:56:15SendMessage(hEdit, EM_SETCHARFORMAT, SCF_DEFAULT, (LPARAM)&cfm);
したら入力した文字の2文字目から違うフォントになってしまいますどうしたら良いんでしょうか?
0924デフォルトの名無しさん
2006/06/27(火) 18:06:00宜しくお願いします。
0925デフォルトの名無しさん
2006/06/27(火) 18:10:580926デフォルトの名無しさん
2006/06/27(火) 18:17:02ありがとうございます。
このご恩は忘れません。
0927923
2006/06/27(火) 18:22:080929920
2006/06/27(火) 23:29:59MAME32というゲームのエミュレータは無反応です・・・
SetForegroundWindowで送り先のウィンドウをアクティブにし、SendInputで入力する、という
処理ですが、ウィンドウはアクティブになるものの、入力が反映されません。
同じ入力をキーボードから直接行うと反応するのですが・・・
キーボードからの直接入力とソフトからのSendInputによる入力ではどこが違うのでしょうか?
0930デフォルトの名無しさん
2006/06/27(火) 23:30:530931920
2006/06/27(火) 23:51:11DirectInputを使っていても、MapVirtualKey()でスキャンコードを取得すれば
大丈夫らしいんですが、それでもできないです(汗)
ttp://printf.jugem.jp/?eid=346
↓送信部はこんなかんじです。(仮想キーコード65は「A」のことです)
case WM_TIMER:
hWnd_obj = FindWindow( "classMAME32" , NULL );
input[0].type = INPUT_KEYBOARD;
input[0].ki.wVk = 65;
input[0].ki.wScan = MapVirtualKey( 65 , 0 );
SetForegroundWindow( hWnd_obj );
Sleep( 30 );
SendInput( 1 , input , sizeof( INPUT ) );
return 0;
0932デフォルトの名無しさん
2006/06/28(水) 01:01:290933デフォルトの名無しさん
2006/06/28(水) 01:38:34タブを変えて、その親ウィンドウにタブが変更されたことを示すWM_NOTIFY
をLPARAMにNMHDRへのポインタをセットして送信したいのですが、アドレス
空間が違うためうまくいきません。
解決策、あるいは他の良い代替方法はありますか?
0934デフォルトの名無しさん
2006/06/28(水) 01:40:17WriteProcessMemoryでデータを書き込んで
そのポインタを渡してやるとか
0935デフォルトの名無しさん
2006/06/28(水) 09:55:210936デフォルトの名無しさん
2006/06/28(水) 10:27:33キーは押し下げるだけでなく、
上げることもあるのだ。
0937デフォルトの名無しさん
2006/06/28(水) 10:31:12それから、65じゃなくて、'A'としたほうがわかりやすい。
ASCII以外の文字セットを使っているWindowsは、寡黙にして聞かない。
0938デフォルトの名無しさん
2006/06/28(水) 10:40:30で最近しったんだけど、タブブラウザのスレープニールとか、Mozilaとかにはエラーフィードバックエージェントみたいなのがあるみたいなんだけど、
これって、どうやって実装してるんだろうか?、そういうパッケージとかソリューションがあるの?
何か情報持ってたらお願いします。
0939デフォルトの名無しさん
2006/06/28(水) 10:55:350940デフォルトの名無しさん
2006/06/28(水) 12:41:310941デフォルトの名無しさん
2006/06/28(水) 14:13:310942デフォルトの名無しさん
2006/06/28(水) 16:27:39スレープニールもMozillaもどうやってるのか知らんけど、
発生するエラーが特定来てるんなら、そのエラーを
ハンドルすればいいじゃんかよ?
あとは実行ログとかエラーログとか画面キャプチャと付き合わせる。
パッケージは知らん。
0943デフォルトの名無しさん
2006/06/28(水) 16:51:050944デフォルトの名無しさん
2006/06/28(水) 18:15:12ActiveXでブラウザ部分のコンポーネント使ってるからIE自体の実行部分にsend, recvが見当たらないんだと思うけど
どっかにIEのsend, recvをHookしてるようなサンプルソースありません?
0945デフォルトの名無しさん
2006/06/28(水) 18:55:220946デフォルトの名無しさん
2006/06/28(水) 21:25:00UNICODE
0947デフォルトの名無しさん
2006/06/28(水) 21:26:41どうやったら新たにアイテムを追加できますか?
教えてください。お願いします。
0948デフォルトの名無しさん
2006/06/28(水) 21:29:02HBITMAPまたはHDCを使って得るようなやつです
0949デフォルトの名無しさん
2006/06/28(水) 21:36:47GetObject
0950デフォルトの名無しさん
2006/06/28(水) 21:38:59てふ�d
0951947
2006/06/28(水) 21:49:53手前で範囲外の配列指定やってました。
0952デフォルトの名無しさん
2006/06/28(水) 22:45:30次スレ立てときましたよ。
【Win32API質問箱 Build44】
http://pc8.2ch.net/test/read.cgi/tech/1151501925/
0953デフォルトの名無しさん
2006/06/28(水) 22:50:150954920
2006/06/28(水) 23:21:08>>936
後々、その問題にもあたりました。
今は解決しています。
ありがとうございました。
>>937
'A'という表記もありなんですね。
ありがとうございました。
0955デフォルトの名無しさん
2006/06/29(木) 00:29:060956デフォルトの名無しさん
2006/06/29(木) 13:31:01この文字列をアプリケーションから取得するには何というAPIを使えばできますか?
0957デフォルトの名無しさん
2006/06/29(木) 14:15:210958956
2006/06/29(木) 14:44:18GetWindowTextは試してみましたが、タスクトレイのアイコンのツールチップの内容ではなく、
そのアプリケーションのタイトルバーらしき文字列しか取得できませんでした。
例えばタスクマネージャを起動すると、タスクトレイには "CPU 使用率 ○%" というツールチップが出ますが、
GetWindowTextで得られるのは "タスクマネージャ"という文字列のみでした。
"CPU 使用率 ○%" を取得する方法って無いものでしょうか。
0959デフォルトの名無しさん
2006/06/29(木) 15:14:02ちゃんと「ツールチップのウィンドウハンドル」を渡しているのか?
0960デフォルトの名無しさん
2006/06/29(木) 16:06:420961デフォルトの名無しさん
2006/06/29(木) 17:41:06ウィンドウハンドルを取得できないウィンドウなんてあるのか?
0962デフォルトの名無しさん
2006/06/29(木) 18:32:420963デフォルトの名無しさん
2006/06/29(木) 18:39:580964デフォルトの名無しさん
2006/06/29(木) 18:52:07argv[0]
0965デフォルトの名無しさん
2006/06/29(木) 18:52:24それは既にウィンドウじゃないだろ。
0966デフォルトの名無しさん
2006/06/29(木) 18:55:540967デフォルトの名無しさん
2006/06/29(木) 18:57:13「実行ファイル」とは何なのか、詳しく説明してもらおうか。
0968デフォルトの名無しさん
2006/06/29(木) 19:01:51>956 >958 でツールチップって言ってたからな。
> この文字列をアプリケーションから取得
いや、吊られちまったのか
0969デフォルトの名無しさん
2006/06/29(木) 19:11:35WinMainからの起動なのでargvが見当たりません。
>>966
ぐぐってみましたけど、これはC++のメソッドですか?
APIなど、Cからでもできる方法が嬉しいです。
>>967
VC++で作成したx86実行バイナリと言えばいいでしょうか。
拡張子.exeを持つファイルです。
0970デフォルトの名無しさん
2006/06/29(木) 19:20:34__argv[0]
0971デフォルトの名無しさん
2006/06/29(木) 19:20:43スマン間違い
GetModulePath
0972デフォルトの名無しさん
2006/06/29(木) 19:21:150973デフォルトの名無しさん
2006/06/29(木) 19:25:380974デフォルトの名無しさん
2006/06/29(木) 19:31:010975デフォルトの名無しさん
2006/06/29(木) 19:37:55ありがとうございます。
ばっちりいけました。
0976958
2006/06/29(木) 23:28:04そういうAPIって無いんですかね。ググっても全然それらしいのが出てこないっすね。
0977デフォルトの名無しさん
2006/06/29(木) 23:41:30ツールチップが表示されていないときに文字列を取得するのは無理な場合もあると思う。
マウスを乗せて初めて文字列を決定する場合があるから。
文字列が固定されているツールチップなら取得できるかもしれないけど…。
0978デフォルトの名無しさん
2006/06/29(木) 23:44:07ツールチップが出る前に中身がほしいと思ったら
アプリケーションに働きかけるしかないんじゃないだろうか。
ツールチップが表示された後なら、ウィンドウハンドルを
どうにかして取得すれば後は簡単だと思うが。
目的と手段が逆になってたりしないか?
0979958
2006/06/30(金) 01:19:14どこかに常に格納されてていいはずなんですよね。
0980デフォルトの名無しさん
2006/06/30(金) 03:50:28それがその後のホバー時に表示される文字列と同じという
保証はないだろ。
0981デフォルトの名無しさん
2006/06/30(金) 13:26:13タスクトレイのツールチップって、実装としてはNOTIFYICONDATA構造体のszTipだろ?
ウィンドウハンドル取得しても、ウィンドウハンドルとNOTIFYICONDATA構造体を、
内部的にどうやって関連付けてるかなんてわからんし、
ウィンドウハンドルから取得するのは無理だと思うけど。
タスクトレイに登録されている一覧を取得するAPIがあったらできるかもしれんが、わしはしらん。
0982デフォルトの名無しさん
2006/06/30(金) 13:38:310983デフォルトの名無しさん
2006/06/30(金) 14:56:44タスクマネージャから情報を取らねばならぬのはなぜ。
0984デフォルトの名無しさん
2006/06/30(金) 15:05:50よかったのでしょうか?
0985デフォルトの名無しさん
2006/06/30(金) 15:18:53SendMessage(EM_LIMITTEXT, GetDlgItem(hWndDlg, IDC_EDIT). (WPARAM)999, 0);
0986デフォルトの名無しさん
2006/06/30(金) 16:10:34ありがとぅ、答えてくれて!
0987デフォルトの名無しさん
2006/06/30(金) 18:13:51よくわかんないけどNT系ならNtQuerySystemInformationで得た値をいじる
0988デフォルトの名無しさん
2006/06/30(金) 18:50:33SendDlgItemMessageも忘れないで。
0989デフォルトの名無しさん
2006/06/30(金) 19:37:530990デフォルトの名無しさん
2006/06/30(金) 19:46:37「関数だかマクロだか」
と表現するのですよお嬢様
0991デフォルトの名無しさん
2006/06/30(金) 19:52:33知らないなら是非知ってください。
0992デフォルトの名無しさん
2006/06/30(金) 19:53:25SendDlgItemMessageを使うメリットは?
0993デフォルトの名無しさん
2006/06/30(金) 20:20:37985のようにSendMessageとGetDlgItemを組み合わせるより文字数が少なくてすむ。
0994デフォルトの名無しさん
2006/06/30(金) 20:22:570995デフォルトの名無しさん
2006/06/30(金) 20:30:310996デフォルトの名無しさん
2006/06/30(金) 20:32:27そういうこと。
逆に言えばSendMessageとGetDlgItemで代用できるから、
知らなくても困らないし、知らない人も多いのだろう。
0997デフォルトの名無しさん
2006/06/30(金) 20:34:280998デフォルトの名無しさん
2006/06/30(金) 20:35:19次スレ
【Win32API質問箱 Build44】
http://pc8.2ch.net/test/read.cgi/tech/1151501925/
0999デフォルトの名無しさん
2006/06/30(金) 20:36:001000デフォルトの名無しさん
2006/06/30(金) 20:36:19Win32API質問箱 Build44
http://pc8.2ch.net/test/read.cgi/tech/1151501925/l50
10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。