Win32API質問箱 Build20

このエントリーをはてなブックマークに追加
スレ立てるまでもない、Win32APIについての質問はこちらへどうぞ。
ただし、最新スレくらいは質問する前に検索してくれ。というかしろ。

過去スレなどのリンクはたぶん>>2-5くらい。
4デフォルトの名無しさん:04/06/25 16:20
4なら海外旅行
行ってらっしゃい
>>1
乙。
>>4
土産よろしく。
84 ◆MwGQyQRf/o :04/06/25 17:02
今からチケット買ってくるよ(;´Д`)
9pd32c6c.tokynt01.ap.so-net.ne.jp:04/06/25 17:03
とりあえず、まだ日本。
どうでもいいからきえろ
IShellFolderのインスタンスの指すフォルダかアイテムIDリストを取得する方法ってありませんか?
GetDislpayNameOfの第一引数にNULL
MSDNに書いてないから、使っていいのかは知らん
SHGDN_FORPARSING以外を指定した場合にエラーになるからだめみたいでですね
皆さんはどうやってあんなに沢山のAPIを覚えたんですか?
一つ一つテストプログラムを作っては、コンパイル・テスト
したんですか?
そうだよ。
だから藻前もがんがれ。
>>15
一つ一つのAPI(関数)専用テストプログラム?
そうだよ。
だから藻前もがんがれ。
18デフォルトの名無しさん:04/06/25 20:50
>>13
>SHGDN_FORPARSING以外を指定した場合にエラーになるからだめみたいでですね

そいつを SHGetDesktopFolder で得た IShellFolder で ParseDisplayName してやれば
ITEMIDLIST が得られるような気がするけど。
>>14
覚えない。
基本的なところだけはもちろんおさえておくが、
必要になったときにググる。
MSDNを使うよりもググったほうがだいたいは楽。
fgets()の使い方を完全に忘れてて今日ぐぐったw
>>14
ヒマなときに help のキーワード一覧とかをだらーっと見てる。
Path ほにゃらら系みたいな、「自分でも書けるから必要ないんだけどあれば使う」APIとかは
「何かをするのにやり方が分からなくて Google で調べる」みたいな感じじゃ出会えないから。
>>14
たくさんあるけど普段使うのはかなり限られてくる。
それにCreateWindowとCreateWindowExみたいにほぼ同じ機能のものも相当あるし、
それとDestroyWindowみたいに対になるものもこれまた相当ある。
MSDNヘルプだと「〜Functions」とかが結構役に立つ。
WindowsのAPIってようするに単なるライブラリだから、ジャンル分けすればそう多くないんだよな。
>>23
つかAPIを直で叩かせずにオブジェクトライブラリにすりゃいいのに。
>>24
WinFX
2623じゃないけど:04/06/25 22:33
>>24
C言語からじゃ利用でけへんでないか
>>24
このスレじゃそれは言っちゃダメ :-)
28デフォルトの名無しさん:04/06/25 22:39
IE上で、ActiveXコントロールを使って
submitイベントをフック(メッセージのフックか?)したいんですが
どなたかやったことありますか?
29デフォルトの名無しさん:04/06/25 22:46
あのVisualC++を買おうと思ってるんですがAPIとかちゃんとヘルプにありますか?
ドットネットとかに変わって今までと何か変わりましたか?
>>24
マジっすか。それは(・∀・)イイ!!

>>26
C++はどう?

>>27
(´・ω・`)
>>18
レスどうもです、とりあえずはそれでできるのでしょうが、
MSDNにNULL指定についての記述が無いのと
他のフラグでエラーが出る事から見て
「たまたま」動いているという気がしなくも無いので・・・
マウスカーソルをShowCursorで非表示にしようと思って使ったのですが
ウィンドウ内しかカーソル非表示にされません。
完全に非表示にするにはどのようにすればいいのでしょうか?
マウスのコードを抜く
>>32
勝手なことすんなヴォケ
良い反応だ
3632:04/06/26 01:42
>>33
(´・ω・`)

>>34
もちろんマウスが動いたりしたら表示しますので教えてください
>>36
ソフ板の例のスレの人か?
マウスフックとウインドウフック入れて
WM_SETCURSORを乗っ取り。
>>37
ありがとうございます

> ソフ板の例のスレの人か?
多分違う人です
>>32
ウインドウ内からマウスカーソルがでられないようにする
テンプレにある
WindowsSDK入門
http://kerochan.no-ip.com/vcsdk/letsprog/letsprog-index.htm
が見れないのは漏れだけですか?
(´・ω・`)
うちも見れんな
>>40
鯖ごと寝ているんじゃないか?

43デフォルトの名無しさん:04/06/26 19:35
マッピングモードをMM_LOMETRICにして、画面に2cm角の格子を書いています。
その格子に合わせてMoveWindowでコントロールを配置しようとしていますが巧くいきません。
MoveWindowの引数を論理単位(ウィンドウ)で配置できないからです。

座標を計算しようとして、

POINT pt;
 int x = GetDeviceCaps(hdc,LOGPIXELSX);
 pt.x = x / 254;
 int y = GetDeviceCaps(hdc,LOGPIXELSY);
 pt.y = y / 254;

LPtoDP(hdc,(LPPOINT)&pt,2);

とすると微妙にズレが出てしまいます。

ScrollWindowExなどの引数もそうですが、引数がビューポートで指定している関数を使う時、
結果が論理単位になるようにする巧い方法ってありますか?
宜しくお願いします。
44503です:04/06/26 23:51
WINAPIについての良い入門書があれば教えてください。
>>44
お約束だがペゾルド
テンプレに必読書も入れといてくれ。
・Advanced Windows
>>45
APIの入門書なら取り敢えずAPIバイブルの方がいんじゃないかなぁ?
PlatformSDKでもいいけど。

ペゾルドは入門を終えて更にステップアップしたい時に最適な気がする。
black.sakura〜の例のサイトが個人的には入門に一番よかった。
猫より2段ぐらい。ネットの文献である程度基礎を掴んでから本買った方が何かと便利な気がする
俺も猫よりWisdom派かな。
本は買わなくてもいけるけど、買ったほうがいいのかもしれない。
50デフォルトの名無しさん:04/06/27 16:08
適当な背景に対してフォント文字列を描画するのにDrawText関数を使ってみたのですが
矩形ごと書き込まれますね(白く浮いてしまう)

文字形状だけを背景に対して上書きする方法を教えてください
(関数名、キーワードだけでも結構です)
よろしくおねがいします
SetBkMode
5250:04/06/27 18:24
>>51
ありがとうございます
天才プログラマーですね、頼もしいです
猫でもわかるの161章にある
LRESULT CALLBACK MyHookProc(int nCode, WPARAM wp, LPARAM lp)
{
char str[256];

if (nCode < 0)
return CallNextHookEx(hMyHook, nCode, wp, lp);
if (wp >= 0x30 && wp <= 0x39) {
wsprintf(str, "hMyHook = %d", hMyHook);
MessageBox(NULL, str, "MyHookProc", MB_OK);
return CallNextHookEx(hMyHook, nCode, wp, lp);
}
wsprintf(str, "キー入力はインターセプトされました\n フックハンドル= %d",
hMyHook);
MessageBox(NULL, str, "インターセプト", MB_OK);
return TRUE;
}
これを実行すると
二重で動作するんですがどうしたらよいでしょうか。
よくわかんねーが、キーボードフックか?
WM_KEYDOWNとKEYUP
5553:04/06/27 19:52
ttp://www.kumei.ne.jp/c_lang/sdk2/sdk_161.htm
此処のDLL処理なんですが
DLLのプロシージャ内でWMメッセージは
取得できるのでしょうか
WMは取得できないな。
繊維状態としてLPARAMのLSBで取得できる
5753:04/06/27 20:44
>>56
具体的にどのようなことでしょうか?
質問です。

必要な時にLoadLibraryでモジュールをロードして、
用件が済んだらFreeLibraryでモジュールをアンロードすると、
タスクマネージャ等で見る所のメモリ使用量は、
モジュールをロードした直後に増えたまま、
アンロードしてもメモリ使用量は低下しません。

また、ダイアログボックス等を使用した場合でも、
EndDialogないしDestoryWindowしても、
メモリ使用量は低下しないようです。

キャッシュのような機構が働いている物と考えられますが、
不要になったメモリを明示的に開放する事は出来ないのでしょうか?
ダイアログ上のリストビューをサブクラス化しようとしています。
SetWindowLong 関数を呼ぶと、戻り値で判断する限り失敗していないのですが、
設定したプロシージャにメッセージがきません。
どこかで凡ミスしているのかもしれませんが、何か考えられる原因はありますでしょうか?
自プロセス内なのか外なのか
>>59
SetWindowLongは自プロセスのウィンドウしかサブクラス化出来ません。
>>60-61
即レス感謝です。
作っているのはDLLでして、ダイアログを生成して、
WM_INITDIALOGがきたところで、SetWindowLogを呼ぶようにしています。

この場合、自プロセス内ということにならないでしょうか?
>>62
ひょっとしてキー関連のメッセージをキャッチしようとしてる?
もしくはCallWindowProcをちゃんと呼んでる?
6459:04/06/27 22:18
解決しました。
やはり凡ミスでしたOrz
サブクラス化したいリストビューの元々のプロシージャを、
GetWindowLong 関数を使ってWNDPROC型のグローバル変数に保存してたのですが、
自分が設定したプロシージャのプロトタイプの方もWNDPROC型にしていて、
実際の関数本体では
LRESULT CALLBACK MyListViewProc(HWND, UINT, WPARAM, LPARAM)
になっていたので、SetWindowLongからは、
WNDPROC型のプロトタイプの方しか見えてなかったことが原因みたいです。

失礼致しました。
(・∀・)ノシ解決おめ〜
エクスプローラみたいなのを作ってるんですが、
shell namespaceを使ってエントリの列挙をすると、
IEも列挙できますよね、しかもコイツBindToObjectが可能なので、
普通に進入できやがります。当然中にはなにも無いのですが。

候補としては
・エクスプローラでやっているように、IEのコンテナになる
・エントリのリストアップをするとき、IEを上手く弾く

の二通りが考えられるのですが、
どちらもIEのクラスIDを認識して特別扱いしないと出来ませんよね?
IEだけならいいのですが、似たようなデスクトップオブジェクトがあると
その都度手動で追加しないといけないのが気分が悪いです。

何か上手く扱う方法って無いでしょうか?
ついでにソースです。
なんでBindToObjectできるんだか、ホント頭にきてます。

#include <windows.h>
#include <shlobj.h>
#include <iostream>

main()
{
CoInitialize(0);
HRESULT hr;
IShellFolder *psf, *pie;
ITEMIDLIST *pidl;
wchar_t *ie=L"::{871C5380-42A0-1069-A2EA-08002B30309D}";
SHGetDesktopFolder(&psf);
psf->ParseDisplayName(0, 0, ie, 0, &pidl, 0);
hr = psf->BindToObject(pidl, 0, IID_IShellFolder, (void**)&pie);
if ( SUCCEEDED(hr) ) {
std::cout << "BindToObject成功" << std::endl;
pie->Release();
}
psf->Release();
CoTaskMemFree(pidl);
CoUninitialize();
}
スタティックリンクライブラリって勝手にOSからアンロードされることって
ありえないよね?
アンロードされたって騒いでいる奴がいたもんで。
ない
70デフォルトの名無しさん:04/06/28 12:52
>>68
その馬鹿を晒してくれ。笑いが止まらん。
>>58
他所でメモリが必要になって初めて解放されるような、定期的に解放されたような
>>繊維状態としてLPARAMのLSBで取得できる

これの意味がよく理解できないのですが
教えていただけませんか。
73デフォルトの名無しさん:04/06/28 18:24
ウインドウをベッキーや2ch専用ブラウザのように分割したいのですが、
どのようにすれば分割できるのでしょうか?
また、それぞれにスクロールをつけることは可能でしょうか?
>>73
A1 可能。二つウィンドウを並べる。
A2 当然可能。普通に付ければいい。
75デフォルトの名無しさん:04/06/28 18:46
MFC相談室(http://pc5.2ch.net/test/read.cgi/tech/1088084875/39
で質問したところ、こちら向きの話題だとアドバイスを受けました。

MFCのCComboBoxを使ってコンボボックスを表示させているのですが、
これのCBS_SORT属性を動的に変更することはできないのでしょうか?
具体的には、
 1:コンボボックスの中身をクリア
 2:SetWindowLongで変更
 3:再度追加
という動作をさせたいのですが、どうも動かないようです。
うまい解決法はないでしょうか?
>>74さん
2つウインドウを並べるとはどういうことでしょうか?
具体的に教えてください。お願いします。
ウィンドウを分割するって事は、ウィンドウが複数必要になるってこった。
>>72
lParamのbit31で、ハンドラが「押し」で呼ばれたか「離れ」で呼ばれたかが判別できるってことだろ。
MSDNのKeyboardProcのページに書いてある。
>>77さん。
ウインドウを2つ用意すれば、左右に分割されたウインドウができるということですか?
それを、どのように記述すればいいのですか?
よろしくお願いします。
> 左右に分割されたウインドウができるということですか
それが分割ウィンドウに見えるかどうかは藻前次第だ。
がんがれ。じゃあな。
面倒がいやならMFCとか使え。
APIで分割ウィンドウを作るような機能はない。自分で実装する必要がある。
それがイヤならMFCでCSplitterWndを使えばよい。まー普通はこっちを
選択するんだろうけど。
質問です

昔はテンプレ3の
- Platform SDK Update
からSDKをダウンロードし、ローカルのHDDに保存できましたが、今は出来なくなったのでしょうか?

Win32APIなどについて調べられたのですが・・・・・
79に付けたしですが、
hWnd1 = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW | WS_VSCROLL,
CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);
hWnd2 = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW | WS_VSCROLL,
CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);
とかして、まずWindowを2つ作るということですか?
Windowを2つできたら、その後はどうすればよいのでしょうか?
よろしくお願いします。
>>83
できる。少なくともできた。
>>84
悪いことは言わない。お前には無理だ。
あ  き  ら  め  ろ 。
>>86に激しく同意
>>73
MFCのCSplitterWndのソースをパクれば?
少なくとも、こんなところでいちいち説明できるような内容ではない。
8986:04/06/28 19:29
まあ、お前には無理だろうし、あきらめたほうがいいんだが、それだけでは思考停止なので。
いわゆる分割ウィンドウは、単純にいえば、普通の子ウィンドウのサイズをユーザー操作で
変更できるだけのモノである。
まず、サイズ変更機能を持たない通常の子ウィンドウを配置したウィンドウを作成できるようになれ。
次に、(メニューとか)ユーザー操作を伴わず、子ウィンドウの大きさを計算し変更できるコードを書け。
その後、大きさを変更したいウィンドウ感にそれ用のウィンドウを配置するか、
親ウィンドウを表示するようにし、その部分がドラッグされたときに上記の計算を行え。
WTLにもついてるよ
>>75
コントロールのスタイルは、ものによってはCreateWindow時にしか効果が無いものがある。
多分CBS_SORTもその類じゃないかね。解決法としては、いったんコントロールを破棄して、
該当スタイルを有効にして作り直すのが一般的。
>>84
まずはテンプレサイトを見るのが作法だと思う。
「猫でもわかる」の117章あたりにそれらしいネタの解説がある。
http://www.kumei.ne.jp/c_lang/sdk2/sdk_117.htm
9375:04/06/28 21:47
>>91
破棄⇒再構築で目的の動作をさせることができました。
大変助かりました。ありがとうございましたm(_ _)m
9484:04/06/28 23:09
>>92
ありがとうございます。
参考にしてみます。
.NET Framework の Char.GetUnicodeCategory のような文字の種別を識別したいのですが、
Win32API で同等の事を行う方法を教えてください。
9683:04/06/29 09:23
>>85 様

1 ローカルプロクシを通さない
2 ActiveXのダウンロードと実行をON
3 IEキャッシュ削除
そして
4 OS再起動

によってダウンロード出来ました。
スレ汚し すみませんでした。
他のアプリウィンドウのHWND取ってきて弄るプログラムを書いてるん抱けど
HWNDからコントロールの種類を判別できないですか?
ボタンとかツリービューとか。
出来るよ。少なくとも標準コントロールなら。
GetClassName
どうやるの?
GetWindowLongを調べたけどスタイルとかUserDataとかはだめだった
出来たよー
\ありがとう/

λ
10258:04/06/29 14:19
>>71
レスthanks.

ソース等ありますか?
もうひとつ質問です。
他のアプリのテキストの内容を取得しようとしても取得できません。
TreeView_GetItemを使ってるんだけど、用意した文字バッファになにも
入ってきません。
>>103
試しに TVM_GETITEM 投げてみ。
>>105
ありがとう、いまそこ見ながら書いたんだけど動かないです;;

//...HWND hcur; //ターゲットのWindowHandle
HTREEITEM ht = 0;
TVITEMEX ti;
DWORD proid;
HANDLE hProcess;
char* pCommon;

memset(&ti, 0, sizeof(TVITEMEX));
//ターゲットのプロセスにメモリを確保
GetWindowThreadProcessId( hcur, &proid );
hProcess = OpenProcess( PROCESS_VM_OPERATION | PROCESS_VM_READ | PROCESS_VM_WRITE, FALSE, proid );
pCommon = (char*)VirtualAllocEx( hProcess, NULL, 256, MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE );
//
ht = TreeView_GetRoot( hcur );
ti.mask = TVIF_TEXT;
ti.hItem = ht;
ti.pszText = pCommon;
ti.cchTextMax = 255;

DWORD readb;
TreeView_GetItem( hcur, &ti );
if( !ReadProcessMemory(hProcess,pCommon,ffname,256,&readb) ){
 printf( "mem error...\n" );
}
printf( "*** %s ***\n", ffname );
//開放
VirtualFreeEx(hProcess,pCommon,0,MEM_RELEASE);
CloseHandle(hProcess);
いきなりソースだされてもよぉ
ごめんなさい
えっとhcurにはターゲットのTreeViewコントロールのHWNDが入ってるんだけど
其処のプロセスをゲットしてVirtualAllocExは成功しているもよう。
WriteProcessMemoryをやるとRead...できちんと読めた。
hcurがきちんとTreeViewをさしてないのかとも思ったけど
TreeView_Expand( hcur, ht, ...)できちんとツリーは開閉した。
後僕に考えられる原因はTreeView_GetItemに渡すtiの初期化がまずいのかと
思ったが、しかしこれでいいよね… うわーn
おっ、virusでも作ってるの?イイネイイネー
>>108
TVITEMEX 自体を先方のメモリに取らないとダメじゃないの?
どうでもいいけどヴァイラスって作った時点で犯罪?
非アクティブウィンドウ時にも休止せず、処理を継続するアプリを作りたいの
ですが、APIで制御出来るのでしょうか。可能ならAPI名を教えて下さい。
>>112
もともと非アクティブ時にもプロセスは休止しない。
ただCPUの割り当ては少し減るんだった気がする
エクスプローラでファイルコピーさせつつ他のアプリをアクティブにすると約3〜4割速度落ちるな。
なので俺はエクスプローラの優先度をhigherに設定してる。板違いだけど一応。
116112:04/06/29 22:40
>>113-115 素早いレスありがとうございます。

アクティブ如何を気にする必要がなければ特別な記述は不要で、逆にRTSで非
アクティブ時には進行が止まる様なのは、その様な処理を敢えて組み込んでい
ると考えていいのでしょうか?
一定時間毎(?)にGetActiveWindowを発行し、返ったのが自分自身でなければ、
なんて事はやらないですよね(即時性がないですし)。アクティブかフォーカ
ス周りのWM辺りを利用するんでしょうか
>>116
そうだよ。
その名もWM_ACTIVEメッセージ。アクティブ化・非アクティブ化等を教えてくれる。
>>58
SetProcessWorkingSetSizeでどう?
>>68
「勝手に」OSが削除することはないけど
明示的にFreeLibraryすれば解放できるから
おおかた騒いでる奴が参照カウントの管理を間違えたんだろ
>>119
Dynamic Link ならともかく Static Link では参照カウントなんてないんじゃない?
121112:04/06/29 23:14
>>117-118
やはりそうなるんですね。回答ありがとうございました。
over
>>120
なくてもあまり困らないとは思うが、Win32ではスタティックDLLの
参照カウントも管理している。起動時は1だから一回FreeLibraryすると
メモリから消え去る(ただしexeは9xだったかNT系だったか忘れたが
どちらかは解放できない)。
意図的な使用例としては自己削除インストーラなんかがたまに使う。
あ、スタティックリンクって.libをリンクする場合の話か。
完全に読み間違えてたorz
DLLをインポートライブラリでリンクした場合の話だと思ってたんだが違うのか?
何か話が混乱してるなw

インポートライブラリでDLLを使用する方法を
ロード時動的リンク(Load-Time Dynamic Linking)

実行中に LoadLibrary でDLLを使用する方法を
実行時動的リンク(Run-Time Dynamic Linking)

と言うそうだ。
正確に伝えるためにはきちんと使い分けた方が良いかもね。

C/C++ コンパイラレベルでは
明示的にコード中で LoadLibrary しない限り、呼んだ API
はみんなロード時動的リンクになる。

Cライブラリ等は
スタティックリンク (LIBC)
とロード自動的リンク (MSVCRT)
が選べるね。
linuxなんかではlibcが外にあるようなうにゃうにゃ(ry
あれも動的リンク
> 明示的にコード中で LoadLibrary しない限り、呼んだ API
> はみんなロード時動的リンクになる。
/delayloadで実行時動的リンクを選べる
まあ中身は LoadLibrary してるだけなんだが
コード中に明示的に書く必要はなくなる
チェックボックスつきリストビューで
特定のチェックボックスを無効化or非表示
ってできるのでしょうか?
>>96関連
ActiveXを使ってコンポーネント選択してインスコする方式だと6時間経ってもCoreすら終わらなかったので
フルダウンロード( http://www.microsoft.com/msdownload/platformsdk/sdkupdate/psdk-full.htm )やったら
2分そこらで終わった。光でよかった・・・
131デフォルトの名無しさん:04/06/30 03:25
129じゃないですけど
129に絡んで、リストビューの中のチェックボックスをオン、オフしたときに
反応を得るにはどうすればよいのでしょうか?
ずっと悩んでいます、教えてください
>>126
libcなんかは静的共有ライブラリといって、
アドレスのバインドはリンク時に、イメージのバインドはロード時にやるという代物だとか。
apacheモジュール(.so)あたりはDLLと同様の動的リンクらしいね。
ネットで検索するとMSDN丸写しな関数リファレンスを載せてるサイトが
やたら多いんだけど彼らはいったい何を考えているんだろう。
多少見やすいとか、そういった自己満足
MSDNが最新にして最良のものだという考えに変わりはない。
以下でMSDNに対する愚見を述べさせてもらう。

MSDNには確かに誤りも存在するし、邦訳版は読みづらい(誤訳を避け、あまりに保守的な訳をしている)が、
英語版は素晴らしい。(ry
136108:04/06/30 13:25
>>110
なるほど、其処まで考えが回りませんでした。ありがとう
…でもTVITEMをターゲットのプロセスに確保してもだめだった(つД;
ターゲットのプロセスをデバッガで見て確保されたエリアにWriteProcess、
ReadProcess... はできていた。だけどやっぱりTreeView_GetItemしても
変化が無い…
VirtualTreeView だったりして
> …でもTVITEMをターゲットのプロセスに確保してもだめだった

普通は自プロセスに確保して、適当にフィールドを設定してから相手プロセスの
メモリにコピーする。そしてそのポインタを使って TreeView_GetItem を
呼び出す。文字列バッファのオフセット値が間違ってるとか?
まず、自分のプロセス内のTreeViewでうまくいくか試してみる
>ti.pszText = pCommon;

先頭に TVITEM をコピーしたとき、ti.pszText のオフセットも変えてる?
文字列専用のプロセスメモリを確保しておくと簡単。


141108:04/06/30 17:55
組んでるものはCUIコマンドのものなんで、別にプロジェクト作って
TreeViewのGetItemを試したら上手くいきました。
んでそのプロジェクトのTreeViewをコマンドでいじろうとして失敗しました。
以下CUIソース
142108:04/06/30 17:56
//...HWND hcur; //ターゲットのWindowHandle
HTREEITEM ht = 0;
TVITEM ti, *pComTi;
DWORD proid;
HANDLE hProcess;
char* pCommon;

memset(&ti, 255, sizeof(TVITEM));
//ターゲットのプロセスにメモリを確保
GetWindowThreadProcessId( hcur, &proid );
hProcess = OpenProcess( PROCESS_VM_OPERATION | PROCESS_VM_READ | PROCESS_VM_WRITE, FALSE, proid );
pCommon = (char*)VirtualAllocEx( hProcess, NULL, 256, MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE );
pComTi = (TVITEM*)VirtualAllocEx( hProcess, NULL, sizeof(TVITEM), MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE );
//
ht = TreeView_GetRoot( hcur );
ti.mask = TVIF_TEXT;
ti.hItem = ht;
ti.pszText = pCommon;
ti.cchTextMax = 255;
DWORD readb = -1;//
143108:04/06/30 17:56
if( !WriteProcessMemory(hProcess,pComTi,&ti,sizeof(TVITEM),&readb) ){
printf( "mem error write...\n" );
}
memset(&ti, 0, sizeof(TVITEM));
TreeView_GetItem( hcur, &pComTi );
if( !ReadProcessMemory(hProcess,pComTi,&ti,sizeof(TVITEM),&readb) ){
printf( "mem error...ti\n" );
}
if( !ReadProcessMemory(hProcess,pCommon,ffname,256,&readb) ){
printf( "mem error...\n" );
}
printf( "*** %s ***\n", ffname );
//開放
VirtualFreeEx(hProcess,pComTi ,0,MEM_RELEASE);
VirtualFreeEx(hProcess,pCommon,0,MEM_RELEASE);
CloseHandle(hProcess);
WinXPでMicrosoft Visual Studio .NET 2003を使ってるんだけど
WM_MOUSEWHEELが定義されてなく
ttp://www.asahi-net.or.jp/~uk8t-ktu/wincode/global/0010.htm
ここ見て解決は出来たんだけど
最初から定義されてないものなの?
>>144
#if (_WIN32_WINNT >= 0x0400) || (_WIN32_WINDOWS > 0x0400)
#define WM_MOUSEWHEEL 0x020A
#endif
> if( !ReadProcessMemory(hProcess,pCommon,ffname,256,&readb) ){

ここの ffname はローカルバッファとして256バイト割り当て済み?
サブスレッドがデータをセットしたら
寝ているメインスレッドを起こしてデータを読み取らせたいのですが
どういったやり方が一般的ですか?
いまはメインスレッドでfor(;;) Sleep(100);しながらフラグを監視してます。
>>143
誤: TreeView_GetItem( hcur, &pComTi );
正: TreeView_GetItem( hcur, pComTi );
では?
>>147
イベント。
CreateEvent, SetEvent, WaitForSingleObject, MsgWaitForMultipleObjects あたりを調べて。
150デフォルトの名無しさん:04/06/30 22:15
リストビューに関して質問です。
ソートの昇順・降順をあらわす三角印(カラムヘッダに表示されるやつ)はどうやったら表示されるのでしょうか?
自前で描画しないとダメ?
>>150
標準じゃついてないな、漏れのはWin2kだけど
>>150
Common Control V6(XP以降)なら可能。
2000以前に対応させようと思ったら、自前で描画する必要がある。
▼▲で誤魔化す手もあるが……。
153150:04/06/30 22:40
>>152
thx
やっぱ自前描画が必要なのですね…
154150:04/06/30 22:45
「カラムヘッダ」と「DC」でググったらよさげな情報みつかりました。
http://search.acty-net.ne.jp/mfc_search/archive/2000-2/msg02144.html
これを参考にしてみます。

「カラムヘッダ」「API」「ソートアイコン」とかでググってたので見落としてたようです。(;´Д`)
ExitThread について質問です。Thread の薄いラッパクラスを作成中なんですが、
SDK のドキュメントでは LPTHREAD_START_ROUTINE のリターン後、暗黙的に ExitThread が呼ばれるとありますが
何らかの処理中にメインスレッドから ExitThread を呼んだ場合、適切な後始末が行われないのでしょうか。
CreateThreadで作ったスレッドの場合は問題ない
>>156
なるほど問題ないのですか。サンクスです。
因みに CreateThread で作成したスレッドに対してでした。抜けてましたね。すいませんん。

ところで ExitThread て明示的に呼び出す必要があるときってどんな時なんでしょう?
何らかの処理中に ExitThread を呼んだところで直ちにスレッドが終了するわけでは無いし(当たり前ですが)
イマイチ使いどころがわからんのですが…。
C++の場合、デストラクタが呼ばれないような気がするけど
大丈夫ッスか?
>>158
ダメです。
なので、ExitThread()は(余程注意しないと)使えません。
スタティックDLL だってさ(プ
161デフォルトの名無しさん:04/07/01 11:01
不特定多数のウィンドウを作る際、
各ウィンドウに対する処理はどのようにして行うものなんでしょうか。
以前は

1 for文をまわしウィンドウを作成する。
 その際、外部で宣言したHWND型配列に各ハンドルを代入させる
2 プロシージャで引数として渡されるハンドルと、
 ウィンドウ作成時に用意しておいた各HWND配列から内容の同じものを
 探して見つける事で多数作られる中のどのウィンドウなのかを判別し
 それに応じて異なる処理をする。

この「どのウィンドウを現在扱っているか」をプロシージャ内で判別する方法が
ややこしいし、なんだかきたないので、
スマートな方法があったら教えてください
根本的に間違っていたら正してやってください
おねがいします
162デフォルトの名無しさん:04/07/01 11:38
ぶらくらはいくない。
>>161
SetProp APIを使ってウィンドウハンドルに対して付加情報をむすびつけておくってのはどうよ?
164デフォルトの名無しさん:04/07/01 12:08
ある文字の種別は GetStringTypeEx API をつかえば取れますが、
UNICODE で規定されているスクリプトタイプを調べる API はありますか?
>>161
for 分で Create しつつ登録する仕組みだと、WM_CREATE あたりのメッセージが
発生するときにはまだ登録されていなくて不便です。

なので、WM_NCCREATE を受けた段階で、CREATESTRUCT 経由で渡されたウィンドウを
識別する情報 (CreateWindow時に作っておく) と hWnd のマッピングを生成すると良いでしょう。
163 の言うように SetProp で登録しても良いし、std::map に入れたりしておいても良い。


「この「どのウィンドウを現在扱っているか」をプロシージャ内で判別する方法」は
GetProp とか std::map::operator [] 一発だから、別にややこしくはないと思う。
ふつー、ウィンドウ毎の情報はC++なりのクラスのメンバに格納して、そのオブジェクトへのポインタを
SetPropなりSetWindowLongなりThunkなりでウィンドウに関連付けて終わり。
167デフォルトの名無しさん:04/07/01 13:43
>>163 >>165 >>166

ありがとうございます
今さらで申し訳ないのですがC++は自分は使えなくて
C言語でやっています
SetProp関数など今まで調べていたのですが
基本的な用語すらちゃんと理解できていないみたいで
具体的にどうすればいいかわかりませんでした
hWndのマッピング という言葉もよくわからないのです
ずうずうしいとは思いますが
相当なアホでもわかるように教えてもらえないでしょうか
C++を使えないってのがオブジェクト指向を理解できない知らないって意味なら悪いことは言わんからオブジェクト指向について勉強しろ。そのほうが後々楽になる。
ウインドウハンドルと関連データと対応付けてメッセージループ上で使用するのは、C++使う使わないに限らず、
オブジェクト指向とは関係ない、ただのロジック。
何故C++を使うだけでオブジェクト指向と言いたがるのか、さっぱり理解できない。
>>167
マッピングっていうのは、「hWnd から必要な情報への対応表」を作成するということ。
そうして、>>165 の前半でいっているのは、

for (int window_id = 0; window_id < 100; window_id++)
{
 my_data_table[window_id].data = hogehoge();
 my_data_table[window_id].hWnd = CreateWindow(...);
}
のようにしてしまうと、WM_CREATE の時にはまだ my_data_table[].hWnd が設定されていなくて
不便だから、CREATESTRUCT 経由で(この例だと) window_id を渡して、WM_NCCREATE で
my_data_table[window_id].hWnd = hWnd を実行すると良いよ、っていう話。
>>167
自分で調べてどうにかしようって気が無いんだったら、
グローバル変数に入れてって既存の方法使えば?
>>169
苦労したんだよ。察してあげな。
BMPを表示させる方法はテンプレサイトをみて分かったのですが、
JPGを表示させる方法が分かりません・・・
簡単にJPGを扱う方法はありませんか?
gdiplus系をぐぐれ
175108:04/07/01 15:50
レストンクス
>>148を修正したら動きました
λ<アリガトー
>>173
あとはOleLoadPictureとかLoadImageとか。
ただしいずれもOSバージョンに制限あり。確認汁。
>>174
サンクスです
依存するのはOSのバージョンではなくIEのバージョン。
釣られませんよ( ̄ー ̄)ニヤリッ
OleLoadPictureは組み込まれているモジュールによって、出来ることが決まる。
JPEG用のモジュールが入っているのがIEなんだが、けっこう知らない人がいるのか。
その他、標準コントロールの拡張機能もIEのバージョンに依存する部分が多い。
Win32API質問箱 Build19
http://pc5.2ch.net/test/read.cgi/tech/1084697545/

>949 名前:デフォルトの名無しさん[sage] 投稿日:04/06/24 19:06
>今までDLLからウインドウを作ろうなんて考えもしなかったんだけど、
>DLLからCreateWindowをするとき、HINSTANCEにはDLLのインスタンスハンドルを指定するのですか?
>それともWinMainのHINSTANCEを指定すればいいのですか?
>NT系だと無視されるようなので、どちらが正しいかってのがちょっと分からないのですが。

催促ですみません、これわかる人いませんか?
182167:04/07/01 18:47
>>170

わかりました!
ありがとうございます
これで外部変数は使わないで済みます。
SetPropの使い方については自分で勉強しながら確認していこうと思います。

>>168

オブジェクト指向ですか。
もうわからない事だらけでやらなきゃいけないこと
山のようにあるっぽいですが、色々調べて勉強してみます

>>171

一応結構長い時間調べたり、にらめっこしたりしてみたのですが
でもわかりませんでした。精進します

みなさんありがとうございました
助かりました。
(´∀`)ノシがんばってねー
>>181
試したわけじゃないけど、
作ろうとしてるウィンドウがどこにあるリソース(メニューとか)を使うかによるんじゃない?
普通はDLLに使うリソース入れるだろうから、DLLのHINSTANCEだと思うけど。
>>181
ウィンドウプロシージャの入っているモジュールの hInstance。
184 の方が正解っぽいぽ
>>184-186
レスありがとうございます。
ウインドクラスの場合は>>184で正しいと思うのですが、
CreateWindowの場合、メニューはリソースのIDではなく
メニューハンドルで指定しますよね?
リソースは影響しない気もするのですが、、、。
とりあえずやってみれば?
>>188
現状触れる範囲ではNT環境しかないもので、試せないのです。
そんなときこそVirtualPC(or VMware)ですよ
結局VirtualPCに9x系のOSインスコしないと動かんぞ。
>>181
プログラミングWindowsでは「どっちでも構わんが私はDLLを呼び出した側のインスタンスハンドルを使うことをすすめる」と書いてある。
>>192
ありがとうございました
194デフォルトの名無しさん:04/07/01 22:33
ウィンアプリで長方形の範囲を塗りつぶすAPIはあるのでしょうか。
今はSetPixelVで点をいっぱい表示したり、
CreateFontで文字サイズを変えたのを1文字を表示する、
方法でやっているのですが、あるなら教えてください。
FillRect
196194:04/07/01 22:55
>>195
ありがとうございます。やってみます。
ExtTextOutのほうが楽だけどな
198194:04/07/01 23:20
>>197
ありがとうございます。こちらもやってみます。
デバイスコンテキストに描画領域を設定する方法ってありませんでしたっけ?
具体的にはWM_ERASEBKGNDである一部分だけ、再描画を停止したいのですが。
IntersectClipRect()みたいなやつか?
ListViewに数万アイテムを登録するとすごく時間がかかるのですが、
何とかこれを高速化する方法ないでしょうか?
ファイラーとかだとSysListView32のコントロールでも一瞬で表示されてるので、
やりようはあると思うのですが。
仮想リストビュー
203デフォルトの名無しさん:04/07/02 05:53
親をHWND_DESKTOPにしてボタン作ったらスタイルにBS_PUSHBUTTONが含まれなくなりました
あとからSetWindowLongPtrとかやってもだめでした
いまのところ描写とかはうまくいってるのですがボタンであるのにBS_PUSHBUTTONでないと
問題が起きるとこってありますか?
>203
C:\bcc55\Include>grep BS_PUSHBUTTON winuser.h
File winuser.h:
#define BS_PUSHBUTTON 0x00000000L
205デフォルトの名無しさん:04/07/02 07:08
>>204
あ... どうりでふくまれないはずですね
でも電卓とかのボタンをspy++で調べるとBS_PUSHBUTTONがあるのですが
今回作ったプログラムのボタンは、みかけは電卓とかのと一緒なのにふくまれません
なんでだろう...
206デフォルトの名無しさん:04/07/02 10:00
文書管理用のツールを作ってみたいんだけど、勉強がてらグリッドやツリービュー、
画像のサムネールや拡大・縮小、なども自作してみたいです。
でもグリッド一つとってもどう実装していいのかさっぱり分かりません。

参考になる本はないですか?
または参考になるソースを入手するにはどうすればいいですか?
イベントとメッセージって何がどうちがうんですか?
2084 ◆MwGQyQRf/o :04/07/02 10:12
とりあえず、海外着いた
209203.208.86.147:04/07/02 10:14
空港からだけど、アドレスはどうなんだろ?
>>209
オーストラリア乙
>>209
……楽しんでこいよ。
>>207
イベントはキーを押したり、マウスを動かしたり、タイマーの時間が経ったり、
起こった事で、メッセージはそれをOSがプログラムに伝えてくるものかな。
>>212
Windowsについてまだ勉強始めたばかりなのですが、
イベント=スレッド間の同期通信
メッセージ=スレッド間の非同期通信
という理解でとりあえずはいいんでしょうか?
>>213
全く違う。
イベントってのは、英語の event そのもの。メッセージも message そのもの。
一般名詞であって、そんなに狭い意味を持って使われてるわけじゃない。

Windows の中では、イベントというと
・イベントドリブン型プログラム、という文脈でのイベント。
 Windowメッセージのうち、ユーザやシステムから非同期的に発生するもの
 WM_LBUTTONDOWN とか。WM_SETFONT などは普通「イベント」とは言わない。
・CreateEvent で作られた同期・排他・待ち合わせ用オブジェクト
・COM オブジェクトからの event sink インターフェイスへの呼び出し。
など諸々。

メッセージは、
・GetMessage や PeekMessage で得られる、ウィンドウメッセージ
・MAPI で転送されるメッセージ

など。
♪これっくらいのっ
 イベント箱にっ
 おにぎり おにぎり
 チョイと詰めて
 あがり コーヒー ゆず さくらっ
>>201
今MSDN開けない環境なんでうろおぼえだけど、
リストの更新(追加)時に更新描画をさせないようにするメッセージかなんかがあったはず。
それで描画をOFFにしておけばそこそこ速度が稼げた気がする。
>>216

SendMessage(hListView, WM_SETREDRAW, 0, 0);

ここで項目追加

SendMessage(hListView, WM_SETREDRAW, 1, 0);
218デフォルトの名無しさん:04/07/02 16:41
すっげー初歩的な質問かもしれないけどさ

WIN32APIって何?
>>218
32ビット版Windowsが用意している関数群。
Cのライブラリ関数には必要ないけど、Windows用プログラム製作には必要なものが揃っている。
>>216-217
201じゃないが、いい事を教えてもらった。Thx
>>219
必要なくはないだろ。
MSVCRTの扱いは微妙なとこだが・・・
>>215
名古屋出身かよ!
225デフォルトの名無しさん:04/07/02 22:49
WinMain関数について質問なんですが、MSDNに

戻り値
関数が WM_QUIT メッセージを受け取って正常に終了する場合は、メッセージの wParam パラメータに格納されている終了コードを返してください。関数がメッセージループに入る前に終了する場合は、0 を返してください。

と書いてあります

しかし、DirectX9のマイクロソフトのサンプルコードには、

// Initialize Direct3D
if( SUCCEEDED( InitD3D( hWnd ) ) )
{
// Show the window
ShowWindow( hWnd, SW_SHOWDEFAULT );
UpdateWindow( hWnd );

// Enter the message loop
MSG msg;
while( GetMessage( &msg, NULL, 0, 0 ) )
{
TranslateMessage( &msg );
DispatchMessage( &msg );
}
}

UnregisterClass( "D3D Tutorial", wc.hInstance );
return 0;
}

と0を返しています
これでもいいのでしょうか?
WinInetで接続時のタイムアウトを設定する方法はありますか?
INTERNET_OPTION_CONTROL_CONNECT_TIMEOUTとか
設定してみたけど反映されてないっぽいのですよ・・

・・どなたかご存知ないでしょうか?
IE5.5だかあたりの時代のWinInetはタイムアウトがまともに動かないんで非同期API使って自力でタイムアウトしろとか言われてた気がするが。
>>225
WM_DESTROYでPostQuitMessage(0);なんて決め打ちしていたら別に同じ。
それにWinMain(main)の戻り値はWindowsが使うんじゃなくて、ユーザが使うものなんだけど、
ウィンドウズではまず間違いなく使われていない(それに使う手段がないに等しい)から別にいい。
>>228
そうなんですか
プログラム終了時に、0が返ってくるとなにかxpとかがカチンと来るのかなと思っていたのですが、
大丈夫なようですね
>>227
あーやっぱりだめですか・・。

非同期APIつーのはこの辺ですかね?
http://support.microsoft.com/default.aspx?scid=kb;EN-US;275046
ちょっと、やってみます。

>>228
スタートアップルーチンが使ってるってことはない?
>>231
少なくとも俺の経験上は、無い。
233デフォルトの名無しさん:04/07/03 04:39
gdi+でjpg画像から、ビットマップのGetPixelのように
1ピクセルの画素値を抜き出すのってどのようにすれば可能でしょうか?
よろしくお願いいたします。
234Windowsマンセー:04/07/03 07:48
>>214
レスありがとうございます。
Advanced Windows 3rdを古本屋で手に入れました。
カーネルオブジェクトという観点から綺麗に書かれていて
これ、とても解り易くて良い本です。
よく読んでから出なおしてきます。
235デフォルトの名無しさん:04/07/03 10:07
ListCtrlに数値を表示する際にカンマ区切りで表示したいわけですが
何かオプションでも有りませんでしょうか。
そういうの良く見かけますけど全部自分で区切って登録してるのかな?
>>235
カンマ区切りって、桁区切り表示のこと?
なら自分で実装するしかない。
まあ、自分で実装しても難しくも何ともないから、おとなしく作っとけ。
238235:04/07/03 11:45
無い様なのでそうすることにします。
桁区切りならGetNumberFormatで出来ますし。
>>238
ライブラリ化しとくと便利かも

ところで、9xでWNetAddConnection2使ってネットワークドライブに割り当てた
Server2003の共有フォルダ(NTFS)を、
9x側がFATって誤認識することがあったんだが、なんか情報持ってる香具師いないか?

9x系全般で再現、同一セグメントで発生した上クライアントPCの環境には特に縛られてない模様で、
再現手順もトリガもまったくわからん状態で困ってるんだが

ローカルディスクならブートレコード読み損なったときにFATと読み違えることも
あるらしい(見たこと無い)が…?

別に作ったテキストファイルを読み込ませて、
画面に表示する方法を教えて下さい。
1) CreateFile()でファイルを開きます
2) ファイルの中身を読み出します(バッファ確保注意)
3) テキストウィンドウを作って2)で読んだ中身を放り込みます
>>241
すばやいお答えありがとうございます
>>239
ネットワークドライブの実際のフォーマットを知ってどうしようっての?
何か意味があるとは思えないが
ファイル名の制約(8.3かどうか,大文字小文字を区別するか,長さ制限)を、
単にNTFSかFATかで区別しているとヤバいかもしれんね。
ちゃんとAPI叩いてればいいんだろうけど・・・
mmapfileにCの文字列処理関数使った場合ファイルの末尾で'\0'でちゃんと止まってくれるの?
意味が分からん
mapした領域オーバーしたらメモリ保護エラーだろ
>>244
>単にNTFSかFATかで区別しているとヤバいかもしれんね。

そりゃ論外すぎる…
248デフォルトの名無しさん:04/07/03 17:38
「ひまわり」とか「TTS」でWIN32APIって使えるのか?
>>244
>>247
FATと誤認識されたドライブを開いて[新規作成]→[テキストファイル]
…orz
まあ、9xが論外というならそれには激しく同意だが
>>249
なにか問題が?

まさか、書込みできないFATを想像してないわけじゃないよね?
>>248
ひまわりは使える。TTSはしらん。
>>249
再現できれば画面さらしてもいいんだが
「"・テキスト"が作成できません。指定されたファイルが見つかりません」とエラーになる。
要は、FATと認識しているにもかかわらず、8.3形式無視した名前付けようとして
勝手にエラーを吐くっぽい

ネットワークドライブ割り当てまでがお仕事で、後は好きに使ってねっつーアプリなんで
こっちとしてはFATだどうだは気にしたくもないわけですが
↑みたいに勘違いしたエラー吐きやがるので
このままではお話になりませんよ、と
すいません。分かる方、ご教授願います。

●フォーカスがないダイアログ側で、現在のキーの状態が得られません

当方でやりたいことは、任意のキーが押されたらキャンセルしたい
そこで、タイマーをセットしておいて、

::GetKeyboardState(g_kbState); // キーの状態を取得する。
for(mm=0, bCancel=FALSE ; mm<256 && !bCancel ; mm++){
 if( mm==243 ) continue;
 bCancel = (g_kbState[mm] & 0x80)!=0 ;
}
で、bCancelがTrueか否かをみていますが、常にFALSEです
フォーカスがあれば、大丈夫なんですが・・・
>>253
MSDN嫁
>The key status returned from this function changes as a thread reads key messages from its message queue.
>The status does not reflect the interrupt-level state associated with the hardware.
>Use the GetAsyncKeyState function to retrieve that information.
>>252
「FATと誤認」してると判断した根拠って何?
なんか妙な勘違いしてるような予感がするんだけど・・・。
>>255
この状況のとき、該当ドライブを右クリックしてプロパティ出すと
 ファイルシステム:FAT
になってる。
実際、Office系のファイルを新規作成すると、新規作成ファイルの命名規則が8.3になる
あたりから判断

実際、共有フォルダ内のファイルは開けるので、ドライブの接続が切れてるとかではないっぽいし
FATでもロングファイル名使えるだろ
つかネットワーク経由でFATとか関係あんのかよ
>>256
つか、話がさっぱり要を得ないんで勝手にまとめなおすけど、

(1)2003Serverで共有フォルダを出している。ローカルディスクはNTFS。
(2)9x上でWNetAddConnection2()使ってその共有をネットワークドライブに割り当てた。
(3)そのネットワークドライブ上でファイルを作成すると
 「"・テキスト"が作成できません。指定されたファイルが見つかりません」
 なエラーが出てファイルが作成できない。
(4)既存のファイルは読める。
(5)Officeでファイル作成すると、名前が8.3形式になっている。

でいいのかな?

ちなみに、ドライブのプロパティに出るファイルシステムは当てにならんと思うよ。
2000からsambaサーバの共有をネットワークドライブに割り当ててるけどNTFSって出るし。
(ちなみにsambaサーバのローカルディスクはsoftupdate付きのFFS)
9xは(V)FATしか知らない(NTFSなんて知らない)から、表示上そう見てるだけでは。

勘だけど、2003Serverの共有か、ドメインorワークグループの設定ミスってる気がする。
>>257
関係ないと思ってたんだが…
動作見る限りFAT(それもFAT32とかじゃなくて素のFAT)ドライブでの動作まんまだし

>>258
要領悪くてすんません、そんな感じです
ただ、
>9xは(V)FATしか知らない(NTFSなんて知らない)から、表示上そう見て
の部分だけど、正しく拾えるときはNTFSとちゃんと出る
実際
クライアント再起動かけたりサーバ側セッション削除して再接続かましたりで
復帰した(後者はほぼ五分五分でうまく行くのと行かないのがあった)から
ネットワーク環境っぽいのはぽいんだが…
再現率が恐ろしく低いんで(つまり普段は正常に動作している)
設定周りよりも負荷とかタイミング依存な感じ?
プログラムを使ってなくて持つところが暗くなってるときに
キーボードのボタンを押したことがわかるにはどうやればいいですか?
何を言っているのか分かりません
俺は分かったけど答えは知らん
俺もわからんので答えも知らん
俺もまじわからん。光学マウスじゃないよな。
俺の推理だと、SetWindowsHookEx(WH_KEYBOARD)
>>260は、ウィンドウ(プログラム)非アクティブ時に押したキーを横取りしたいんだろう。
平たく言うとキーロガーを作って{好き|嫌い}な{アノ子|あの糞野郎}に仕込んでやりたいと。
持つ所ってタイトルバーか…orz
物理的に持って暗くなるのもを探したよ
エスパーが多いスレで質問してよかったな。
>>266
なるほど。あんたスゲーや。
少々violateな推測をするに、>>260はこいつなんじゃないかと。
http://pc5.2ch.net/test/read.cgi/tech/1087929711/962
>>270
うん。俺も思った。
962って962の前に何かレスしてるの?
>>272
少なくともその質問関連のレスはないね
>>272
軽く検索したけど、当該スレ内にそれらしき書き込みは一切無し。
その奇妙さと日本語の不自由さを含めて962と260が同一人物との
推測に至りました。
>>273-274
((;゚Д゚) …ゴクリ
とりあえず、質問の文面からしてプログラマの素養無しなので、さっさと
あきらめることをお勧めするな、漏れは。

まあ他の職業も無理だろうけど。
アインシュタインなどの天才は260のような文章を書くと聞いた覚えがある
そうか。
じゃあプログラマじゃなくアインシュタインになれ。
池沼に見える天才が居るのは事実だが、全ての池沼が天才であるわけではない。
アインシュタインはボーナスでないよ
天才は、思考が飛躍するので凡人がついていけない。
>260のようなのは、思考が飛躍するのではなく支離滅裂なので凡人がついていけない。
天才へのねたみを恥ずかしげもなく表出するスレはここですか?
283デフォルトの名無しさん:04/07/03 23:53
プ
287デフォルトの名無しさん:04/07/04 00:00
ドゥアフォ
甲子園
つまり

プ ロ市警が「超法政大学逮捕」乙彼。
ドゥアフォ甲子園

っていうわけだな。
よぉ〜わからんが、なんかわらける。
>なんかわらける。
なんかばけらった
スパイ(をつくろうとすること)がばれて切れてる感じだろ
凡人の発想はそんなものなんだね
真の天才は2chで情報収集などしないものです。
BOOL PathIsDirectory(LPCTSTR)
のディレクトリだった場合の戻り値が 0x10 なのですが
なんでしょうか?これは
MSDNには Returns TRUE if the file exists, or FALSE otherwise.となっています。
if(PathIsDirectory(...)) でやっておけば問題なしですか?
#define TRUE 0x16 じゃないですよね
↑ちなみにwin2000 IE最新です。
ヘッダ調べたところTRUEは1に、FALSEは0にdefineされてる。しかしBOOL型の関数であって
元々値をintで比較するように設計されてないだろうから!=FALSE(つまり>>307と同じ)でいいんじゃないかな。
サンプルコード書いて試したわけじゃないけど。
まぁ普通はTRUE==!0 FALSE==0だから。。。
確かに紛らわしいけどそこは柔軟に対応してあげて下さい。
311307:04/07/04 20:15
MSDNの引用を間違っていました。正しくは
Returns TRUE if the path is a valid directory, or FALSE otherwise.
まあ同じですが。
>>309,310
なるほど。MSDNの言っているTRUEがVCで定義されているTRUEということではないということですか
気にせず前進といきます どうもです
まぁBOOLって云ってるのにTRUE/FALSE/-1の3つが返ってくるGetMessageに比べたら
313デフォルトの名無しさん:04/07/04 21:46
CreateProcess関数は第1引数か第2引数に実行ファイル名を代入すればOKという認識でいいのでしょうか?
でも、そうだとすると二つある必要がないですよね
コンソールから実行する感覚でやる時には第二引数に放り込んだほうが楽なんだわ。
GetCommandLineで取れるものが変わってくる。
POSIXサブシステムのためにそーゆー仕様になってるらしい
コントロールに、TTM_ADDTOOLでチップヘルプをつけているのですが、
コントールに、XPスタイルを適用(manifestファイル使用)すると、
チップヘルプがうまく表示されなくなってしまい困っています。

具体的な症状としては、
・アプリケーション起動直後は、正常に表示されます
・コントロールをクリックすると、そのコントロールのチップヘルプが表示されなくなります
・XPスタイルを適用しない場合は、コントロールをクリックした後でも正常に表示されます

解決策・原因等をどなたかご存じないでしょうか。

・開発環境
WindowsXP pro + SP1
Visual C++6.0 pro + SP6 + PlatformSDK
>>315
ああ・・・なる
>>316
それだけでわかるかよ。
どうやってコントロール作っているのかも書いてないし、TTM_ADDTOOLを送るときの
LPTOOLINFOも書いてないし。manifestファイル中身だってわかんね。

聞くのはいいけど、何がどうなっているのかくらい書いてからにしてくれよ。
回答者にはエスパーの資格を有することが必須条件です。
幸い、ここにはエスパーが多いから。
ウィンドウプロシージャで新しいメッセージを作ろうと思うんですが、
メッセージ番号がWindowsが定義したものとかぶらないか心配です。
例えば自分で作るときは5000番台にするとか、そういう決まりごとは
無いんでしょうか。あったら教えてください。
>>321
msdnかどっかに書いてあったと思う
WM_USER+hoge
にすれば確かかぶらない
RegisterWindowMessageとか。
>>322
その範囲は、コントロールが使用することがある。
現在は、WM_APP+nが推奨される。
>>322
残念、正解はWM_APP+hoge
今までずっとWM_USER使ってたけど・・・
WM_USER through 0x7FFF Integer messages for use by private window classes.
WM_APP through 0xBFFF Messages available for use by applications.

なるほどね。WM_USERはウィンドウクラス用、WM_APPはアプリ用ってことか。
>>324
>>326
回答がかぶるのを防止するには何番から使い始めるのがいいでしょうか
330321:04/07/05 00:39
みなさまありがとうございます・・・。夜中だというのに
スレの回転が速い・・・。
他のプロセスのウインドーのアクティブを変えるにはどうやればどうやればできますか?
333デフォルトの名無しさん:04/07/05 03:24
ファイルオープンダイアログを自作する必要が出たのですが、
ファイルオープンダイアログの中で表示しているディレクトリの中身を
リアルタイムに更新するにはどうすれば良いでしょうか。

標準のダイアログを見てると、何かメッセージを受け取っているようですが
それを受け取れるようにするにはどうすれば良いのかわかりません…
FindFirstChangeNotification
Win2k以降でよければファイル名まで知らせてくれるAPIあったよな。名前忘れたけど。
ぐぐったら見つかった。
NT3.51 SP3 以降
ReadDirectoryChangesW()
2K 以降
SHChangeNotifyRegister()
>>333
むしろファイルオープンダイアログをいじるほうが楽だったりして…
hEdit = CreateWindow("EDIT",〜
で作成し画面に貼り付けたエディットウインドウを
一時的に非表示にしたいんですけど簡単にできますか?
ShowWindow()
340338:04/07/05 15:25
>>339
いけました,サンクス.
たまにHideWindowで探して鬱になる漏れ・・orz
>>333
まず、その必要を無くせ。
>>333の欲しい答えはOPENFILENAMEのlpfnHookの事のような気がする。
344デフォルトの名無しさん:04/07/05 22:49
VB6.0の質問です
IntegerをByte配列に変換したいのですがAPIのCopyMemoryを使って
Dim data(1) As Byte
Dim a As Integer

a=3000
CopyMemory(data(0),a,2)

とやると明らかに化けた数値がdata()に入ってしまいます
この状態を解消するやりかたをどなたか教えてください
VBのことは知らんが、Integerは4バイトとか言うオチではないよね?
CByte
>>344
意図がわからん。手元でやってみた限りではdata(0)は184、data(1)は11で、
(11*256)+184=3000。これは別段おかしな動作ではないと思うが?

>>345
VB6のIntegerは2バイトだね。

関係ないけど、VBだとDATAってステートメントじゃなくなってるんだな。
dataって変数名でドキドキしてしまった(笑
>>333
すでにいろいろヒントが出てますが、漏れも勝手な類推に基づき、キーワードを提供。
stc32
こんなことやってるの俺だけかな?

namespace std {
#ifdef UNICODE
typedef wstring TSTRING;
typedef wstringstream TSTRINGSTREAM;
#else
typedef string TSTRING;
typedef stringstream TSTRINGSTREAM;
#endif
}

>>349
この方がシンプルじゃないかい?

namespace std {
typedef basic_string<TCHAR> TSTRING;
typedef basic_stringstream<TCHAR> TSTRINGSTREAM;
}
動けばどっちもおなじだろ
>>351
んなこたぁない
353349:04/07/06 11:19
>>350
おお。全然気づかんかった。
サンクス
>>131
>129に絡んで、リストビューの中のチェックボックスをオン、オフしたときに
>反応を得るにはどうすればよいのでしょうか?

前に LVN_ITEMCHANGED と書いた者だが。

俺のプログラムでは必ず1つはチェックされている事が必要なので,
LVN_ITEMCHANGING で最後の1つのチェックが外されようとしているか判定していて,
うまく動作している。

お前は LVN_ITEMCHANGED 自体を受信できていないとか書いていたが,
LVN_KEYDOWN とかも受信できていないのか?




WM_NOTIFY 知らないとか。
356344:04/07/06 22:42
>>347
解決できました
Single aをInt(a)でCopyMemoryに放り込んでいたため
おかしな数値になっていました。
ちゃんとinteger変数に代入してやればうまくいきました
変な質問ですいませんでした
すいません。おしえてください。
ウインドウプロシージャとデータの送受信をするにはどうすればいいのでしょうか?
グローバル変数を使えば楽なんでしょうけど、プロの人はそんなことはしないのかなと
思って。
>>357
送受信する相手による。
#include <windows.h>

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR, int)
{
::Sleep(5000);
return 0;
}

と、コンパイルして実行するとカーソルが砂時計に変わりますが、
カーソルを変化させないようにするにはどうしたらいいのでしょうか?
360357:04/07/07 11:32
>>358
たとえばウインドウから子ウインドウを作って、それぞれのプロシージャ間でやりとり
したいデータがある場合はどうすればよいのでしょうか?
361357:04/07/07 11:51
普通は関数間でやりとりしたいのなら引数で渡すとか、関数の返り値を使うとか
すると思うのですが、プロシージャは引数が決まっているからそういうことは
できないですよね?
SendMessage(hwnd_dst, WM_APP+α, (WPARAM) length, (LPARAM) pointer)
で大抵のデータは送れるわけだが。

俺なら同一スレッド内ならウィンドウプロシージャ無視して直接対象ウィンドウを管理してるオブジェクトのメンバ関数呼び出すが。
>>359
未確認ですが。。
呼び出し側のCreateProcessのSTARTUPINFOで
STARTF_FORCEOFFFEEDBACKを指定。
>>361
CreateWindow()/CreateWindowEx() の最後のパラメータも使ってあげてね♪
やり取りしたいデータのポインタか、その構造体のポインタを渡せば幸せになれるかも。
365デフォルトの名無しさん:04/07/07 13:44
プリンタのプロパティから設定できる「印刷後ドキュメントを残す」を、プログラム側から設定したいのです。
GetPrinterを使って、PRINTER_ATTRIBUTE_KEEPPRINTEDJOBSの値を調べるところまではできたのですが、
値を設定するにはどうしたらよいでしょうか?
お知恵をお貸しください。
>>361
基本的には>>362でいいと思うけど、
WndPrco間の通信はマルチスレッド処理になるから、処理順とか資源管理には気をつけてね。
デッドロックとか分かりにくいバグ引き起こしたりするから。
>>363
dクス!
グローバル変数使えばいいじゃん
そんなことこだわるほうが馬鹿のすること
369357:04/07/07 14:40
>>362
>SendMessage(hwnd_dst, WM_APP+α, (WPARAM) length, (LPARAM) pointer)
>で大抵のデータは送れるわけだが。
なるほど。
ありがとうございます。

>俺なら同一スレッド内ならウィンドウプロシージャ無視して直接対象ウィンドウを管理してるオブジェクトのメンバ関数呼び出すが。
すいません。
素人なんでもう少し詳しく教えていただけないでしょうか?


>>368
>グローバル変数使えばいいじゃん
>そんなことこだわるほうが馬鹿のすること
そうなんですか?
自分は所詮素人なんでグローバル変数をがんがん使えばいいのかなという気もしますが・・
プロの人もそうなんでしょうか?
慣れてくるまで、簡単な方(理解しやすい方)を使った方がいいぞ
そうして、動くものを完成させるのが、最も重要なことだよ
そんなところで悩んでいたら、いつまで経っても完成しないよ

そのうち、いろいろな方法を覚えてきて、改良を加えればいい話。
質問です。
CreateWindowでウィンドウつくってその親ハンドルをもとにコードでボタン等を配置するのではなくて、
VBみたいに、ウィンドウ(フォーム)にボタンなどはりつけたウィンドウを、はじめからよべませんか?
リソースでつくってよぶのかと思ったんですが、リソースではダイアログしかつくれないし、
ダイアログだとアイコンが使えないので意図とちがうので。
>>369
グローバル変数はアクセスそれ自体は簡単だけど、
データ更新の通知とか内容の有効性とかアクセス排他とか、
外堀をきちんと埋めておかないと意外なところで逆襲食らいがちなので、
一番使い方の難しい手法だったりする。分かっててやる分には勝手だけどね。

専用の仕組みがあるのなら、一見難しいようでもそれを使うのが一番簡単ってのはよくある話。
というのは、必要性があるからこそそういう仕組みが作られてるからで。

単純に++してるだけだと安心してたら、マルチプロセッサにもってった途端に破綻したことあったな。ハハハ
>>371
無理。
どうしてもやりたかったらVBからCで作ったDLLを呼び出すとかそういうことを考えてみたら?
>>373
そうなんですか。
じゃあ地味にコードかいてコンパイルして表示しては配置を直さないといけないんですね。
>>371
アイコンって、CTRL+ALTしたときとかに出てくるアレのことなら、
WM_INITDIALOGあたりでWM_SETICON投げればダイアログにも付けられるけど?
>>375
ALT+TABだった。冷房入れてくる。
>374
ダイアログつったって結局表示さすときの制御の違いなんだから、ダイアログリソースをCreateWindowして
ちょこっと設定してやれば普通のオーバーラップウィンドウとして使えると思うぞ。
>>374
お手軽にやるなら、VC++ で MFC 使って CFormView とかでも出来るけど、
見かけだけの問題なら、>>375 のいうようにダイアログで処理するのが簡単。
>>377
>ダイアログリソースをCreateWindowして
まさにそれが知りたいのです。どうやるんですか?
WTL入れてダイアログベースでプロジェクトを開始すればOK
>369
社長、Windowのクラス化というのをご存じでしょうか?

詳しく話を聞かせるのは面倒なので、自分で調べて。
RegisterClass()で登録するウインドウのクラスのことでしょうか?
それぐらいの知識しかありません。
C++で書いてるとはひとことも出てきていないのだが。
>382
ちゃうちゃう。そのウィンドウクラスじゃなくて、C++のclass。

ウインドウプロシージャをクラス内で定義することによって、
メンバを色々出来るようにすること。

>383
>〜メンバ関数呼び出すが。
に反応しているからC++だと決めつけていた。
もしCなら、staticとグローバル関数で妥協なんてのもいかが?
>>384
構造体だろがC++のクラスだろうがHWNDとの対応関係が必要というのがここまでのお話なんだが
>>379
CreateWindowのウィンドウクラス指定のとこにMAKEINTRESOURCE(IDD_DLG)してやりゃいいかと思ってたが、そう甘くなかった。
CreateDialogでできたウィンドウをSetClassLongをつかって背景色やスタイルとかプロシージャを書き換えるといい。

( っ・ω・)っ話
⊂(・ω・⊂ )

漏れもWinMain側で作ったデータをウィンドウプロシージャに使わせようと思って、
調べてるうちにSetProp/GetPropつーAPIを見つけたんだが、これってそういう用途に使っていいものなのか?
このAPIの用途知ってるやつ、教えてください。_|\●__
>>369
他には WM_COPYDATA 使え
>>386
うほ、SetClassLongなんてAPIあったのか・・・。

Set/GetProp系はHWNDに対して、キーに対応する値を複数セット対応づけられるものらしい。
GWL_USERDATAみたいに単一の値である必要がないので、
VBのプロパティを独自に追加できるような感じで、便利っぽい。

>>387
WM_COPYDATAはプロセス間のメッセージ送信に使う奴だあkら、
プロセス内で使うにはちーとオーバー気味な気がする。
(確か内部的にファイルマッピングオブジェクト使うはず)
>>388
サンクスコ。*Propの使い方がわかったよ。英語版MSDNだとどうも感じがつかめなくて、
VBみたいなIDEのプロパティリストをつくるための、特殊なタイプのAPIかと思ってたよ。
>>384
C++じゃなくてCオンリーでやっています。
でも、>>385の話だとC++にすれば解決するって問題でもないってことですかね?
サブクラス化ってのはC++とはまた別なんだけど、
その辺と混乱してる人いない?

そもそも質問者がどういうレベルなのかで
回答者達の間で解釈が幾つかに分かれてる気がする。
>>386
WinMainはウィンドウを生成するルーチンだけにしたほうがいい。
いろんな初期化とかはWM_CREATEをキャッチしたときにやるべき。
複数のウィンドウにまたがる処理ならデータを渡す方法になやむよりも、
グローバル変数にした方がスマートと思う。
>>392
そのウィンドウが専ら関係するデータならWM_CREATEでやるほうがいいけど、
ウィンドウ間にまたがって使用されるような共通性の高いデータであるならWinMainでやるほうが適切。
case by case。

それにグローバル変数には>>372のような問題もあるので、何がいいかは実装次第。

ところで、この話まだ続けるならこっちでやらない?
http://pc5.2ch.net/test/read.cgi/tech/1049790146/
394392:04/07/08 09:58
>>393

>>392
「複数のウィンドウにまたがる処理ならデータを渡す方法になやむよりも、
グローバル変数にした方がスマートと思う。」
の「データ」というのは「WinMainで作ったデータ」の意です。
言葉足らずでスマソ。
つまり完全に>>383氏に同意ってことです。
それと誘導thx。
>>391
>319-320 ですよ。
BMPを表示させる時に、リソーススクリプトを使えば表示出来るのですが、
LoadBitmap()で直接ファイル名を指定すると画像読み込みに失敗してしまいます。

リソーススクリプトを使わずにファイル名で表示させる方法はありませんか?
>>396
LoadImage
>>397
サンクスです
>>386
使ってもいいよ

そのAPIを使っているかはしらないけど、
OLE DnDのドロップターゲットになると
自動で付けられるね。
MSNMessengerの通知ウインドウみたいに
タスクトレイの辺りで小さく表示されるウインドウを
簡単に作るライブラリとか無いですかね?
CreateWindowとかで毎回小さなウインドウを作ればいいのかな?
毎回作らんでも不要なときはShowWindow(,SW_HIDE)しとけばいいんじゃないか?
>>392,399
またレスキターヽ( ´ー`)ノ
ほんとありがとうございます_|\○_
内田こねりで抜きまくり
404403:04/07/09 00:05
こんな恥ずかしい誤爆初めて
403以前の君のレス番を書いていてくれたらもっと面白かったんだけどな:D
406デフォルトの名無しさん:04/07/09 00:35
晒しage
普段はリファレンス検索も面倒がる俺が
内田こねりを無意識にgoogle (・∀・)ホホウ ナカナカ
408デフォルトの名無しさん:04/07/09 07:15
どなたかインスタンスハンドルからメインウィンドウのウィンドウハンドルを取得する方法知っている方いらっしゃいますか?
ShellExecute の戻り値を使いたいのです。
>>408
ShellExecuteの戻り値って、16bit Windowsじゃなきゃ意味ないよ。

って、16bit Windows使ってたらスマソ
410デフォルトの名無しさん:04/07/09 10:12
>>409
レスありがとうございます。
本当ですね。MSDNをちゃんと読んだら書いてありました(汗
一応32ビットでやってるのでShellExecuteの戻り値はエラーチェックにしか使えないわけですね・・・。
戻り値の型だけ見て早合点してしまいました。
不注意ですみません。

初めはCreateProcessで同様のことをやってみようと思ったのですが、取得できるのがPROCESS_INFORMATION構造体でプロセスとスレッドのハンドルとIDってとこでしょうか。
ここからメインウィンドウのハンドルを取得する方法がやっぱりわかりません。
果たしてそんなことは可能なのでしょうか?
>>408
ShellExecuteEx()を使ってプロセスハンドルを取得。
後はGetProcessId()、EnumWindows()、GetWindowThreadProcessId()の組み合わせ。
412デフォルトの名無しさん:04/07/09 10:17
スレとは関係なくて申し訳ないんですが
アプリケーションエンジニア試験とネットワークのテクニカルエンジニア試験って
どっちのほうを先にやるのが一般的なんですか?
っていうかどっちのほうが簡単ですか?
あほな質問でごめんなさい
スレと関係ないとわかってなぜこのスレに書く?
お前は吉野家コピペか。
>>412
どっちでもいい。
君がとりたい方をとりたまえ。
>>413
まぁまぁ。
妥当なスレを見つけられなかったんだろ。
そういきりたつなよ。
>411
便乗質問なんだけど、
GetProcessId()って見つからないのだが、ハンドルからIDを求める方法ってあるの?

>410
CreateProcess()もありなら
>411に追加で、探索範囲が狭くなるけど、EnumThreadWindows()なんてのもある。
GetProcessId は XPSP1,Server2003 or later
汎用的な方法はHWNDに対してグローバルフックしてGetCurrentProcessIdかな
418417:04/07/09 11:34
根本的に間違っていた
2000Pro以降ならNtQueryInformationProcessかな
Win32って、例えばウィンドウを分割した場合、
2つのViewにそれぞれメッセージループを実装することってできますか?
他のプロセスのウインドーをしらべるのに
ウインドーに書いてある文字以外を使って
プログラムがわかる方法おしえてください
>>420
なにから何を導き出したいのか曖昧だぞ。
>>419
チャイルドウィンドウが独自のメッセージポンプ(UIスレッド)を持つことは可能ですよ。
でも「Viewにそれぞれメッセージループを実装する」っていう感じではなくて、
別スレッドを作成してそちらでチャイルドウィンドウを作り、そのウィンドウのメッセージを
処理するって形になります。
>>422
ありがとうございます。
結構面倒そうですね。
通常、intはfprintf(fp,"%d",xxxx);と、charはfprintf(fp,"%s",xxx);
というようにファイルに書き込んでいますが、COLORREFはどうやってやられてますか?
あと、COLORREF=RGB(赤,緑,青);としますが、COLORREFから赤だけとか、青だけとかの値を
抽出することってできますか?
>charはfprintf(fp,"%s",xxx);
そんなやつぁいねえ。
>ファイルに書き込んでいますが、COLORREF
%08x
つか、Win32APIじゃねえな、この質問は。
>COLORREFから赤だけ
Get[RGB]Value
426424:04/07/09 14:50
有難うございます。
>>charはfprintf(fp,"%s",xxx);
>そんなやつぁいねえ。
では、どうしますか?
cout << COLORREF << endl;とか?
COLORREFの定義がどうなってるかも知らなさそうな勢いだな・・
>>424=>>426
>>>charはfprintf(fp,"%s",xxx);
>>そんなやつぁいねえ。
>では、どうしますか?
アナタ C シッテマスカ?
fprintf(fp, "%c", xxx);
429424:04/07/09 15:28
>>428
有難うございます。
つうかcharは
char xxx[10+1];

のつもりで書きました。

スレ汚しすみません。有難うございました。
lstrcpyやlstrlenの先頭にある 'l' って何かの略なんでしょうか?
知人は「L"text" の 'L' じゃね〜の?」って言ってました。
ご存知の方、教ぇてけろ。
DirectXでプログラミングをするときは、
やはりWin32を使ったほうがいいのでしょうか?
再生したり、フレームからビットマップを取り出してウィンドウに貼ったり、
そいつをポップアップメニューでいろいろ処理したり、といったことをしたいのですが。
いいです。
>>431
用途と、実装者の能力による。
今時DirectXくらいどの言語でも扱えるから、自分の得意なのでやってみればいい。
よくこんな質問に答えられるなあ
それがお前との差
>>430
LPTSTR lstrcpy(
LPTSTR lpString1, // address of buffer
LPCTSTR lpString2 // address of string to copy
);

Lは "long"
16ビットWindowsは、ポインタサイズを"near" "long"で区別していた。
32ビットWindowsは区別しない。
>>435
頓珍漢な質問にもっと頓珍漢な答えが出来るヤシとそうでないヤシとの差だな。
>>436
nearとの対比ならfarだと思う。
438デフォルトの名無しさん:04/07/09 17:48
どこかで WINAPI の
メッセージやマクロや関数を大量に載せてたHPを
見かけたんですが、改めて探すと発見できません。
どこかいいサイト知りませんか?
MSDN
440430:04/07/09 18:03
>>436
ロングポインタの L だったんですね、サンクスです。
441デフォルトの名無しさん:04/07/09 18:26
>>436

Large の L じゃないのか(笑)
442438:04/07/09 18:30
>>439
dクス。
いいところを教えてもらいました。
far はー……DOSか。
LはLoveのL♪
>>441
でもさ、LP〜って型はこういう具合に山ほどあるよ
typedef int INT, NEAR *PINT, FAR *LPINT;
(NEAR/FARはWin32では#defineで消される)
Farは元々はDOS時代の用語で、8086のリアルモードでセグメント境界を越えるポインタのこと。
セグメント:オフセットで表記する、1Mバイト空間を指す物理アドレス。

Nearは16bitのポインタで、Win16(16bitプロテクトモード)の普通のポインタ。
なお物理アドレスは「セグメントセレクタ(16bit):オフセット(16bit)」の32bitで表現するので、
リアルモードとの連想でこれをFarポインタと呼んだ。

Longは32bitのポインタで、Win32(32bitプロテクトモード)の普通のポインタ。
Nearを16bit→32bitに拡張したもので、オフセットだけでWin16のFarポインタと同様の
32bit空間を表現できるようになった。「これがNearとFarの区別がなくなった」という言葉の意味。

Win32でも「セグメントセレクタ(16bit):オフセット(32bit)」をFarポインタと呼ぶかもしれないけど、
これは16bitプロテクトモードと違って物理アドレスを意味しないし、用語としても一般的ではない。かも。
lpszはlong pointer string terminated by zeroの略
long pointer to a string terminated by zeroだ
>>447
こう言う略語の元ネタが分かるサイトってどっかないかなぁ?
MSDNじゃ分からなかったよ(´・ω・`)
どうでもいいけど、lpszについてはASCII string terminated by zeroのASCIZなんかを知ってると理解しやすいのかな。
略語の元ネタをまとめたサイトは・・・知らないけど命名規則としてハンガリアン記法を使ってるからこの辺が多少参考になるかも。
http://masafumi-t.cool.ne.jp/ready3.htm

# つーか俺の場合intのプリフィックスにはnを使ってるけどなぁ・・・
451デフォルトの名無しさん:04/07/09 21:28
(・∀・)ウソツキー ASCIZハ ASCII with Zeroノリャクダヨー
452450:04/07/09 21:31
orz
ところでMSは相当いい加減なハンガリアン記法なんとかしてほしい。
>>453
.NETでは止めたんだけどな。過去の資産には手が回らんらしい。

つか今更弄ったら混乱するだけだと思うぞ。

>>418
Microsoftはサポート対象にしてないが
NT系ならもっと前からNtQueryInformationProcessは使えるけどね
exeヘッダのMZは?
MZ80K?

Mark Zbikowsky
Mark Zbikowski
MS-DOZ
さいた まんぞう
祝一平
>>459
何の冗談かとおもったら、それほんとなのか・・・勉強になった。まとめてみる。

・MZ
DOS用EXEのヘッダ。DOS2.0開発責任者の一人、Mark Zbikowski氏のイニシャルに由来。
・NE
Win16用EXEのヘッダ。New Executableの略。
・LE
仮想デバイスドライバ(VxD)のヘッダ。Linear Executableの略。
・PE
Win32用EXEのヘッダ。Portable Executableの略。
・LX
OS/2用EXEのヘッダ。Linear eXecutableの略?
Win32API とは全く関係ない話題だが、
えらい勉強になったゾ
今のexeでもMZから始まってるんだよな。
WinFXでもMZだったりするのかな。
WinFXの雛形であろう.NETのコンパイラが吐くバイナリもMZ→PEだからな。一応後方互換性のためとなってるけど
実際のところは単にthis program can't be run in dos modeって出すだけだ罠
すでに、スタブを実行させるのすら面倒がいる罠。
補足トリビア。
昔のDOSではMZではなくZMでもOKだった。
タスクバーに表示されるWindow(Alt+Tab時に表示されるWindow)を列挙したいんだけど
EnumWindowでやると余計な者まで一杯出てしまいます。
なんでGetWindowLongでStyleをとってWS_CAPTIONとかで選り抜いてみたんだけど
それでも多いんですよ。これやってる人たくさんいると思うんだけど
やり方を上手くググれませんでした。

たしかCreateWindowしたときにタスクバーに入るかどうかはStyleで
決まってたと思ったけど上のやり方では無いんでしょうか
>>469
(親がデスクトップ || NULL) && WS_EX_TOOLWINDOWでない && HIDEされてない
>>470 感謝!
472デフォルトの名無しさん:04/07/10 13:02
TVINSERTSTRUCT構造体のANSIバージョンからUNICODEバージョンへ
若しくはその逆の変換をしたいと思っています。
しかし、メンバの中にunionが存在するので
普通にコピーしていくだけじゃ駄目な気がします。
この場合はどのようにすればいいのでしょうか。
マウスカーソルの現在位置を知るときにGetCursorPosだと
スクリーン全体のx,y座標になってしまいます・・
ウインドウでのx,y座標を知るにはどうすればいいですか?
XPのタスクバーでグループにまとめられるかどうかは
どういう基準で判断してるんでしょうか
>>473
ScreenToClient
>>474
ありがとです
同一プロセス、同一クラス
>>472
IE4未満を指定すればunionはでてこないし、あっても普通にコピーしていい。
当たり前だけどその後item(or itemex)のpszTextを変換しろよ。
Windowsプログラムで使われるデータ型(HWNDやHDCなど)を
VC++6でデフォルト青文字にて表示させるためのファイルが
あったと思うのですが、配布場所をご存じないでしょうか

確かUser.datとかそんな感じのファイル名だったと思うのですが
ツールバーでボタンを右詰にするにはどうすればいいのでしょうか?
480教えてください:04/07/10 15:51
とあるサンプルコードのウィンドウプロシージャに
case WM_LBUTTONUP:
PlaySound(TEXT("laugh.wav"), NULL, SND_ASYNC | SND_FILENAME);
return 0;
こんなのをつけてみたのですが
外部参照1が未解決です、とエラーがでてしまいます。
laugh.wavをプロジェクトフォルダの中にいれてみたり、デバッグフォルダに
いれてみたり試してみたのですが、うまくいきません。
ウィンドウプロシージャに上みたいなコードを付け加えてlaugh.wavをフォルダに
いれるだけでは、だめなんでしょうか??
VC6.0PROを使っています
winmm.lib
>>478
UserType.dat
>>480
少なくともlaugh.wavは無関係。
>>482
レスありがとうございます、無事編集済みのを見つけることができました

ひとつ貼っておきますね、ここの人にも感謝しつつ
ttp://www.beginthread.com/Article/dev.null/UserType.Dat/
485デフォルトの名無しさん:04/07/10 16:39
裏描画域を作るCreateCompatibleDCやCreateCompatibleBitmapは、
GetDC、BeginPaint、どちらのHDCから作っても同じのが出来るのでしょうか。
>>485
できるけどBeginPaintだとEndPaintまでしか使えないよ
WM_PAINTから抜けたら終わりだよ
487485:04/07/10 16:47
>>486
ゲーム開始時に作って終了時に消す裏描画域を作りたいのです。
表示する内容を常に保持しておいて、
WM_PAINT、それ以外、兼用として使いたくて。
>>487
GetDCで無問題
489485:04/07/10 16:55
>>488
分かりました。ありがとうございました。
つーかGetDC(NULL)。
WinMainで使っていた変数をCreateThread関数で作ったスレッドに渡すにはどうすればいいですか?
492472:04/07/10 18:57
>>477
サンクスです。
よく考えたら構造体のサイズはAもWも同じなので
memcpyしてpszTextだけ挿げ替えて使用するようにしました。
>491
第四引数LPVOID lpParameterを用いる。
494491:04/07/10 21:07
>>493
変数が一つだとそれでいけるんですけど、3つくらい渡したい変数があってどうすればいいか悩んでるんです
>>494
構造体
>>476
IEを別プロセスにしていてタスクマネージャ上でも明らかに別プロセスなのに
タスクバー上では同じグループになっているから違うと思います。
マルチスレッドで作れるスレッド数に上限ってありますか?
>>497
http://www.microsoft.com/japan/msdn/library/ja/jpdllpro/html/_win32_createthread.asp?frame=true
> 解説
> 1 つのプロセスが作成できるスレッドの数は、利用可能な仮想メモリによって制限されます。
> 既定では、各スレッドに 1MB のスタック空間が割り当てられています。
> そのため、最大 2,028 個のスレッドを作成できます。
> また、既定のスタックサイズを減らすことにより、さらに多くのスレッドを作成することもできます。
スタックを使わないプログラムを書けばメモリーしようしないでいくらでもつくれるの?
今だ!500ゲットォォォォ!!
 ̄ ̄ ̄ ̄ ̄∨ ̄ ̄ ̄       (´´
     ∧∧   )      (´⌒(´
  ⊂(゚Д゚⊂⌒`つ≡≡≡(´⌒;;;≡≡≡
        ̄ ̄  (´⌒(´⌒;;
      ズザーーーーーッ
>>499
だから利用可能な仮想メモリによって制限されます、って書いてるやん
じゃあ、シングルスレッドのスタックのサイズを減らすにはどうやるの?
503名無しさん@そうだ選挙に行こう:04/07/11 12:18
strftimeの様にFILETIME構造体を日付に書式化するAPIって無いですか?
SYSTEMTIMEからの変換でも構わないですが。
ロケール関係でwsprintfで書式化する方法以外を探してます。
FILETIME―FileTimeToSystemTime()→SYSTEMTIME―GetTimeFormat()→(゚д゚)ウマー
>>504
サンクスです。でもコレは時間だけしかフォーマット出来ないのか、、、
でも
GetDateFormat(lpsz)
GetTimeFormat(lpsz + lstrlen(lpsz))
で何とかなりそうなので使わせていただきます。
贅沢言えば一発で出来るのが有ると良いんですけど。
506名無しさん@そうだ選挙に行こう:04/07/11 12:45
DWORD型変数dwの値を、デバッグ用にfprintfで出力したいのですが、
フォーマットはどのように指定すればいいのでしょう?
DWORDはunsined long のtypedefのようなのですが、

fprintf(stream,"%lu\n",dw);

としてしまって良いのでしょうか?
でもこうするとtypedefしている意味が無いような気がしますし…
気持ちはわかるが、そうするしかない
>>502
なんで>>498のリンク読まないの?
>>506

#define DWF "%lu"
とか定義しておいて、
fprintf(stream,DWF"\n",dw);
ってのはどうよ?
古いコンパイラでは使えないけどナ。
fprintf(stream,"%lu\n",(unsined long)dw);
ってやればいい

   時が止まった
continue;
MessageBox(NULL , TEXT("選挙行ったか?") ,TEXT("質問") , MB_YESNO | MB_ICONQUESTION );
PCに接続されているHDDのリストを取得するには、
どういうAPIを使えばいいんでしょうか?
CドライブとかDドライブとかいう単位ではなく、
「ディスクの管理」で見られる、ディスク0とかディスク1
とかいう物理的な単位でです。
純粋に初心者の質問なんですが、
TEXT("選挙行ったか?") のTEST("")って使わなくてもいいのにみんな使ってるのはなんでですか?
>>515
本に書いてあったから。
コードの流用性が上がるから。
めんどい以外の損がないから。
習慣。
なんとなく。
今日はいい電波ですね。
ぬるぽ。
はらへった。
早く帰りてーなあ。
TEST("")って、アサーションでもしてるの?
>>517
ちょっと前の過去ログを読めば、TESTがTypoだと気付くと思うんだが。
TESTって何をするものですか?
関数ですか?
テストする関数
521名無しさん@そうだ選挙に行こう:04/07/11 19:58
拡張子の説明(エクスプローラの詳細で表示される「種類」の項目の文字列)を
取得する為以下の様にしました。

SHFILEINFO shfi;
::SHGetFileInfo("hoge.txt", 0, &shfi, sizeof(SHFILEINFO), SHGFI_TYPENAME);

しかし、この場合実際に存在するファイルを指定しなければ取得出来無いようです。
その為、一々tempファイルを作成していますがかなり効率悪そうです。
これを何とかして取得出来る様にならないものでしょうか。
#ifdef UNICODE
#define TEXT(s) L##s
#else
#define TEXT(s) s
#endif
だっけ?
名無しの「そうだ選挙に行こう」はそろそろやめた方がいいよな
>521
当たり前です。
たとえば、hoge.txtという名前のフォルダが存在できる以上、
実物を見ないと種類は決定できないのは明白でしょう。
>>522
ってことは、TEXT(lpszHoge)とかやっちゃいけないはずだよね
char *pszHoge = TEXT("HOGE");
こんなぼけもいる。
527デフォルトの名無しさん:04/07/11 20:30
>>524
なるほど。しかし拡張子の種類の文字列を取得したいだけなので
実物のファイルがフォルダか否かは関係無いんですよ。
フォルダオプションのファイルの種類なんかどう取得してるんでしょうね。
もっと全然違う取得法が有るんでしょうか?
>>527
HKCR参照汁。
>>527
レジストリを覗けばいいんでない?
http://www.lhut32.com/page5.html
の下のほうみたく。
>>528
だせえじゃん
>>530
脳無しのほうがダサダサ
なに言ってんの?
ださくない方法教えれ
>>521
SHGFI_USEFILEATTRIBUTESを追加で存在しなくても取得できる
つーか、HKCR検索するのが一番早いと思うけどな。
536514:04/07/11 21:06
ずっと調べてるんですがまだわからないです。
物理的な単位はデバイスIDってよぶんですかね。
537521:04/07/11 21:13
>>534
取得出来ました。
SHGFI_USEFILEATTRIBUTESにそんな効果が有るとは盲点でした。
WEBとかMSDNとか見るとファイルの属性を取得するフラグと書かれてるだけですからね。
MSDNは完全に翻訳して理解してたわけじゃないのでアレですが。
>>536=514
WinNT系ならCreateFile()で指定できなかったっけ? APIのマニュアルよく読んでみ。
>>208
こいつはまだオーストラリアか?
>>538
\\,\PHYSICALDRIVExってやつですね。できそうです。
ありがとうございました。
>>208
マジで行ってるのか?
デスマの休憩ぐらいはいいか
5424 ◆MwGQyQRf/o :04/07/11 23:46
>>539,541
もう帰ってきたよ。2週間位行ってた。
向こうは冬だったけど、日本は暑いね。
1週間の間違いだろ
5444 ◆MwGQyQRf/o :04/07/11 23:59
>>543
いや、約2週間。6/28に日本を出発して
次の日にシドニー到着。2chに書き込むの
忘れてて、7/2にメルボルンで書き込み。
んで、7/10に帰ってきた。>>208の書き込みが
ちょっと、まぎらわしかったね。ゴメソ。
なるほど。つーか決めてから三日で行ったんですが。身軽でいいっすね
5464 ◆MwGQyQRf/o :04/07/12 00:02
間違いメルボルンじゃなくてミルデューラだった。
>>542
冬ってことは12月くらい?
5484 ◆MwGQyQRf/o :04/07/12 00:37
これ以上、語るとスレ違いとか言われそうなんで、
これで最後にします。スレ汚しスマソ。

>>547
向こうは北半球なので、日本と完全に逆。
場所にもよりますが、(日本の月+6)%12って
感じで…。1月位の気候かな?

>>545
フリーのPGで、しかもあまり仕事しないので(w
3ヶ月位仕事して9ヶ月遊ぶというような生活を
しているので、身軽です。遊ぶ分しか仕事
しないので、貯金は全然無いです…(;´Д`)
549デフォルトの名無しさん:04/07/12 02:44
CreateWindowのクラス名をBUTTONとして作ったボタンに
SetWindowLongPtrを使ってWS_THICKFRAMEを追加してサイズ変更できる
ボタンを作ったのですがWS_EX_WINDOWEDGEもいっしょにくっついてきてしまいます
SetWindowLongPtr等をつかってWS_EX_WINDOWEDGEを取り除こうとしたのですがだめでした
WS_THICKFRAMEを自前でエミュレートするのは避けたいのですが方法はありますか?
プロシージャーのサブクラス化ぐらいしか思いつかないなぁ
>>548
一年中仕事してるのに貯金が無い人へのあてつけですか?
>>551
一年中仕事しているし貯金もないけど、そこそこの生活を維持できた親も養えているから不満はありません。
>>551
でも、フリーで貯金無いと、「仕事無し→即あぼーん」だからね…。
かなり、綱渡り状態。会社で働いてて貯金無いのとは、
比べ物にならないと思うよ。
554教えてください:04/07/12 17:22
ドゥオオオ
PlaySound()を使うにせよmciコマンドを使うにせよ、
wavファイルを再生しようとすると外部参照が解決できません
というエラーがいつもでてしまうのですが、
wavファイルを再生するときは何か事前に設定したりしないと
だめなんでしょうか???
VC++6.0PRO使ってるんですが。
なんなんだ一体???ホゲゲ???
#pragma comment(lib, "winmm.lib")
とりあえずエラーメッセージを嫁。
つい最近全く同じ質問を見たきがするんだが。
ドゥオオオ
定番質問は誰かまとめればいいのにと思ったりしないでもない
まとめたってどうせ読まずに質問する奴は後を絶たないと思ったりしないでもない
561教えてください:04/07/12 20:12
こんなエラーなんですけど

mci2.obj : error LNK2001: 外部シンボル "__imp__mciGetErrorStringA@12" は未解決です
mci2.obj : error LNK2001: 外部シンボル "__imp__mciSendCommandA@16" は未解決です
Debug/mci2.exe : fatal error LNK1120: 外部参照 2 が未解決です。

つい最近の同じ質問も私のやつです。
っていうかPlaySound()で解決しないならmciコマンドでやろうと
思ったんだけどやっぱり同じエラーでてまたしても立ち往生です。
外部参照が未解決ってエラーは何をミスってると出るエラーなのかだけでも教えてください
>>561
必要なlibをリンクしてない
リンクすべきライブラリをリンクしてない。
564563:04/07/12 20:15
カブッタ orz
565教えてください:04/07/12 20:18
あ、なるほど
winmm.libというのがその必要なライブラリってことですな??
566教えてください:04/07/12 20:19
ちゅーか手元の本にはそういう肝心なことが書いてない・・・
ドゥオオオなんだこの本は!
書名を更科
>>567
Programming Windows
使ってる環境が何か知らんが、
ライブラリのリンク法くらい調べたほうがいい。
おまえは某ランドのコンパイラ使っとけ
見事にスルーされてる可哀相な>>555
555==571
>>571慰めて
>>571
一応>481も
575デフォルトの名無しさん:04/07/12 21:38
メニューバーの文字のフォントサイズを変えられるAPIは何ですか?
RegSetValueEx
StretchBlt
CreateWindowExの第一引数にWS_EX_TOPMOSTを入れると
常に最前面に表示されるようになるのは解ったのですが。
常に一番後ろに表示されるようにするにはどうしたらいいでしょうか?
WS_EX_USHIROMOST
SetWindowPos(hWnd, HWND_BOTTOM, …
"常に"
スレッド作って
for(;;)
{
 SetWindowPos(hWnd, HWND_BOTTOM, …
 Sleep(1);
}
デスクトップ貼り付けってのなかったっけ
常に後ろにかくれるようなウィンドウにするには
http://techtips.belution.com/ja/vc/0014/
>>580
>>582
有難うございます
SetWindowPosまでもたどりついたのですが
スレッドを使うとは知りませんでした。
>>584
最前面の反対は最背面なんですね
URLまで張ってくれて有難うございます
一番後ろって事はデスクトップウインドウより後ろって事だから、
単に非表示にしても変わらないんじゃね?
一番後ろにすると見えなくなっちゃうけどいいのか?
Lunaビジュアルスタイルにするのってmanifestファイルを
作ればいいってのはわかったんだけど、
リソースに含めるのは↓のとおりにやっても反映されません。
http://hp.vector.co.jp/authors/VA015850/delphi/tips/etc13.html

ちなみに使っているのはlcc-win32(バージョン3.8)です。
リソースコンパイラもそれに付属のものです。
なんかアドバイスお願いします。
>>587-588
デスクトップを使わない時に表示できればいいので大丈夫です。

>>584さんのリンクを参考(というかそのまま)に
case WM_WINDOWPOSCHANGING:
((LPWINDOWPOS)lp)->hwndInsertAfter=HWND_BOTTOM;
break;
をウィンドウプロシージャに挿入したら上手くできました。

有難うございました
>>561
つか、コンパイルエラーはAPIの問題じゃなくて環境設定の問題だから、
このスレの前提を満たしていない。背伸びしないでVC初心者スレあたりで聞きなさいな。
592デフォルトの名無しさん:04/07/13 07:36
以下の様にしてファイルのアイコンを取得していますが
どうもHTMLファイルのアイコンだけが取得出来ません。

SHFILEINFO sfi
SHGetFileInfo("hoge.html", 0, &sfi, sizeof(sfi), SHGFI_SYSICONINDEX | SHGFI_ICON | SHGFI_SMALLICON );
SetIcon(hWnd, sfi.hIcon);

何か足りない処理でも有るのでしょうか。
>>591
コンパイルとリンクの区別がついてない人
>>591もこのスレの前提を満たしていないってオチですか

# Build16の368からコピペ

>質問なのですが、
>
>かなりいろんなサイズのフォント作成して、
>TextOutするアプリを作ってて、Win2kまではフツーに動く。
>
>が、
>XPで動かすとTextOut終わってフォントDeleteしても
>仮想メモリが増え続けて、アプリを終わらせないと
>戻らない。(リソースの明示的リークはないと思う)
>
>こんな現象に出くわした人いますか?

激遅れすですが、
これってアジア版XPの仕様みたいです。

回避法はあんまり無いので、バグとしか
思えませんけど。
>>595
情報ソースは?
597595:04/07/13 13:12
>596
開示できるソースは無いです。
タイーホ
脳内ソースじゃ開示できんわな
開示しますた(`・ω・´)
ttp://www.bulldog.co.jp/
601595:04/07/13 15:56
>599
そのとおりです。
>>592
HTMLって事はIEかネスケでそ?
ダサい発言禁止
×でそ
○ウホ
605デフォルトの名無しさん:04/07/13 20:00
質問させてください。
HDCからHBITMAPを作成する事は可能ですか?
方法があれば教えて頂きたいのですが。
CreateCompatibleBitmap
>>605
やりたいことを「ちゃんと」書きなさい
608THE 初心者:04/07/13 20:04
プログラミングの本を購入して、その中にプログラムらしき物が書いてあって、これを打ち込んでビルドしてくださいっていうところがあるんですが、どこに打ち込んだらいいんでしょうか?
メモ帳でしょうか?また、打ち込んだプログラムをどうやって起動させるのでしょうか?
教えてくださいおねがいします。
えっと、なんかCプログラミングってかいてあります。だからCなのかな?
すっごく初歩の質問ですみません
>>608
よそへ行きなさい
610THE 初心者:04/07/13 20:12
ごめんなさい。かくとこ間違えました
611605:04/07/13 20:28
>>607
例えば、ウィンドウのHDCに転送した画像を
HBITMAPとして確保したいのですが、どうやればいいのでうしょうか?
1.CreateCompatibleDC
2.CreateCompatibleBitmap
3.SelectObject
4.BitBlt
>>612
この場合、CreateCompatibleBitmap()で作成したHBITMAPから
生のBit配列は取得可能ですか?
CreateDIBSection
GetBitmapBits
まあ、こんなもの使っても嬉しくはないわけだが、
HBITMAPから生のって言ったらこれだろ。
中じゃダメって言ったのにー!
617605:04/07/13 20:54
分かりました。あとは自分で調べてみます。
ありがとうございました。
つーか、ビットマップに直接アクセスしたきゃ最初からDIBSection使えば。
ビットマップ操作はAPI関係の質問としては定番中の定番だから、
google先生に聞いたほうがまとまったいい答えが見つかるよ。
目的を明確にせずに手段ばかり聞こうとするから、役にも立たないDDB関数なんぞ
教えなきゃいけなくなっちゃうんだ罠。
まぁgoogleに聞く前にプログラミングWindows読めばビットマップ関連の基本はばっちりなんだが
どうせ読むなら「Programming Windows」にしようぜ。
  大  改  定
624589:04/07/13 23:11
bccのリソースコンパイラを使ったらできました。
なんでだろ〜。
そういや旧版のプログラミングWindows95で、2章にGDIの解説まとめてやってて、
最初に読んだ時なかなかわからなくてかなりへこんだもんだ。
普通ならこれで一冊の本になるぞ、って
Win95で256色主流だった頃は、DDB/DIBに加えてパレットも必須だったからねえ。
もーあの時代には戻りたくねえ・・・。
256色以下だとパレット保持してるからね。
256色でパレットのないドライバってのもあったけどね
629デフォルトの名無しさん:04/07/14 15:22
MSのCryptoAPIメーリングリスト、最近メールが配信されてこないなあ、
と思っていたのですが、調べ物をしようとしたところ、以下のURLで
アーカイブの閲覧も検索もできなくなっていることにことに気づきました。

http://discuss.microsoft.com/archives/cryptoapi.html

どこかに引越ししたのでしょうか? それとも廃止?
アーカイブはどこかで公開していないのでしょうか?
ちょう有用な情報満載だったので、何とかアーカイブをゲットしたいのですが、
もうだめぽげでしょうか...?
>>629
今アクセスしたら普通に見れましたよ。
だめぽげです。
>>630
スタートページと検索フォームは見れるのですが、
各アーカイブをクリックすると"The archive files could not be accessed..."と表示され、
検索実行すると0件になってしまいます...
>>631
だめぽげですか。_| ̄|○
>>633
今年の2月第1週以降はリンクすらない事から鑑みるに、
その辺りで終わったんじゃないか?

直接MicrosoftのWebMasterに問い合わせてみては?
635629:04/07/14 16:27
まったく気づいていなかったのですが、最後のほうに配信されていたメールで
以下のようなアナウンスがあったのに気づきました。俺って間抜け。

Microsoft will discontinue the CryptoAPI, CAPICOM, Smartcard SDK and
Smartcard DDK mailing lists on Feburary 1, 2004. Support for these areas
will contine on the microsoft.public.platformsdk.security newsgroup.

上記newsgroupでは見慣れたGulu達があまり現れていないみたい。このメールの後に
別メーリングリストを作ろうという動きもあって、今はそっちで活躍しているのかも。
ただ、今までのCryptoAPIメーリングリストはMSの技術者の人が出入りしている点も
魅力だったんだよなあ。

そんなわけで、お騒がせしました。m(_ _)m
>>634
インシデント取られるぞ:P
DVDドライブに入っているメディアがCDかDVDかを調べるAPIわかりませんか?
>>636
WebPageに対する問い合わせでもインシデント取られるのけ?

とマジレスしてみる:-)
タスクバー(notタスクトレイ)に並んでる順にウィンドウハンドル列挙ってできるんでしょうか?
再配置ならShowWindowで一旦全部消して好きな順にSW_SHOWするってサンプルは見つかったんですが……。
現在の並びを取得するってのが見つからなくて。
639です。
ITaskbarListってのを調べてみましたが、
これもAdd/Delete/Activateしかない模様……。
強いて言うならウィンドウが最後に表示された順だろうが、Explorer落としたりするとかなり好き勝手な順番に変わるからあんま意味ないと思うが。
AllocConsole()で作ったコンソールウィンドウをシステムメニューから閉じると、
GUIのメインウィンドウまで閉じて、プロセスが終了してしまうのを防止したいのですが。
どなたか、方法を御存知ないでしょうか。
>>642
勘だけど、SetConsoleCtrlHandlerかSetConsoleModeでどうだろう?
>>643

BOOL WINAPI HandlerRoutine(DWORD dwCtrlType)
{
if(dwCtrlType == CTRL_CLOSE_EVENT)
{
FreeConsole();
}

return 0;
}

SetConsoleCtrlHandler(HandlerRoutine, true);

てな具合にやってみたのですが、やはりプロセスが終了してしまいます。

SetConsoleMode は Ctrl+C の無効化には使えましたが、この用途にも使えるなら、
具体的にどう使うのでしょう?
サンプルコードは無いでしょうか。
CとAPIでオセロを作っています。棋譜みたいなのをlogというファイルに
書き込んでいくのですが、これを保存したいんです。
普通のアプリで保存とかを選ぶと保存の画面がでてきますよね?ファイル名とか
ディレクトリとか選べる画面。あれを表示してオセロのlogを保存するには
どうしたらいいのでしょうか?
GetSaveFileName()でぐぐりましょう
>>644
FreeConsoleしてもいいんなら最初からさっさとFreeConsoleしちゃえば?
>>644
ヘルプくらい読めよ。

HandlerRoutine

各コンソールプロセスは、HandlerRoutine 関数の独自のリストを持っています。
最初、このリストには ExitProcess 関数を呼び出す既定のハンドラ関数だけが含まれています。
・・・
コンソール信号を処理するときは、TRUE を返してください。
FALSE を返すと、このプロセスのハンドラのリストに登録されている次のハンドラ関数が使われます。

TRUEの値は何だよ?FALSEの値は何だよ?
644じゃないけど、CにBOOL型は要らないとよく思う。紛らわしいだけで利益がない。
Cにあるのは_Bool型だが?
651645:04/07/14 23:12
>>646
ファイルを保存ダイアログボックスの表示は分かったんですけど、
どのファイル(この場合オセロのlogの事です)を保存するってのは
どこで指定してるんですか?
>>648
失礼、ミスりました。
でも結果は同じ。
やはり終了します。
ちなみに、FreeConsole をコメントアウトすると、
ダイアログが現れ、当然「このプログラムを終了できません」となり、コンソールウィンドウのみ閉じること
はできません。

BOOL WINAPI HandlerRoutine(DWORD dwCtrlType)
{
if(dwCtrlType == CTRL_CLOSE_EVENT)
{
FreeConsole();
}

return 1;
}

SetConsoleCtrlHandler(HandlerRoutine, true);

>>647
システムメニューから閉じたいのです。
あるいは、タイトルバーの×印のボタンから。
653639:04/07/14 23:41
>>641
> 強いて言うならウィンドウが最後に表示された順だろうが、
やっぱりないですかね……。
Win+Tabでタスクバーの並び順にタスクバーボタンのフォーカスが移動するから
なんかあるんじゃないかと思ったんですが。

> Explorer落としたりするとかなり好き勝手な順番に変わるからあんま意味ないと思うが。
だからこそ並び順で取得したい訳なんですけど……。

クラス名順でソートとかして使いやすく再配置が実際的な解なのかな。
日本語リファレンスには、

SetConsoleCtrlHandlerで各パラメータにNULLおよびTRUEを指定して呼び出すと、
呼び出し側プロセスがCtrl+Cシグナルを無視するようになる。

と書いてあるけど。
655654:04/07/15 00:03
あ、Ctrl+Cじゃないのね、失礼。
>>653
Win+Tabはタスクバーを管理してるエクスプローラ自体が反応するから、
内部的には持ってるんだろうけどね。

ということで、タブコントロールから取得するというのはどうでしょう。
>>649
スレ違い。こちらへどうぞ。
http://pc5.2ch.net/test/read.cgi/tech/1085915001/
>>645
何がしたいの? ファイルへの出力はGetSaveFileName()じゃできませんが。
>>639
某スレでそこらへんの話題が出たのでちょうど調べてた.
w2kでしか確認してないけど,TCITEMのlParamにウィンドウハンドルが入ってる.
xpはどうなのかな?
下のようなリソースがあるんですが、バージョン情報を取得する定石で
VerQueryValueを使って文字コードを\VarFileInfo\Translationから取得
すると、800004B0になってしまって、\StringFileInfo\040904E4に
アクセスすることができません。どうすればよいのでしょうか・・・

1 VERSIONINFO
FILEVERSION 5,0,128,0
PRODUCTVERSION 5,2,6,0
FILEOS 0x4
FILETYPE 0x1
{
BLOCK "StringFileInfo"
{
  BLOCK "040904E4"
  {
    VALUE "CompanyName", "Adobe Systems, Incorporated"
    VALUE "FileDescription", "Adobe Photoshop"
    VALUE "FileVersion", "5.0.2"
    (省略)
  }
}

BLOCK "VarFileInfo"
{
  VALUE "Translation", 0x8000 0x04B0
}
}

643だけどごめん、無理かも。
素直に別コンソールプロセス立ち上げて名前なしパイプでつなぐとか。
662639:04/07/15 08:11
>>659
XPですが、タスクバーのが
Shell_TrayWnd : ReBarWindow32 : MSTaskSwWClass : ToolbarWindow32
とToolbarに変更されているため、TBBUTTON.dwDataまたはIBBUTTONINFO.lParamがそれっぽいです。

……が、なぜか言うことを聞いてくれません(涙
まずボタン総数を取得すると倍の数値が返ってくるし。
正直Cそのものにあまり慣れてないので、下のに何か胡乱なところがあるんでしょうか?

void Hoge(HWND toolbar) {
   int c, i;
   TBBUTTON b;
   c = SendMessage(toolbar, TB_BUTTONCOUNT, 0, 0);
   for (i = 0; i < c; i++) {
      if (SendMessage(toolbar, TB_GETBUTTON, i, (LPARAM)&b)) {
         printf("%2d : %x\n", i, b.dwData);
      }
   }
}
>>662
タスクバー(エクスプローラ)は別プロセスなのでTB_GETBUTTONで使う
TBBUTONは共有メモリーを使わないとダメ.
664教えてください:04/07/15 14:46
mciで動画を再生したいんだけど、
動画のためにわざわざ別のウィンドウを用意したりしたくなくて、
ウィンドウの隅っこのほうで動画が動くようにしたい。
んで、動画をウィンドウのどこらへんの位置で再生するかを指定
したりする方法ってないですか?
ない
666教えてください:04/07/15 15:20
ええっマジですか????????
一つのウィンドウの中で動画を再生する領域とボタンとかコントロールが
ならんでる領域がわかれているようなウィンドウって
なにか別の方法でないと作れませんか???
667教えてください:04/07/15 15:26
もしやひとつのウィンドウにみえるけど実は中に子ウィンドウを
埋め込んでつくるってことなのかな???
>>664
WINDOWで再生するウィンドウハンドルを指定
PUTで位置・サイズ指定
…だったっけ?
>>667
そう。その「ボタンとかコントロール」も子ウィンドウなわけだし。
>>668
それでもいいけど、リドローその他の問題考えると MCIWndCreate で親ウィンドウを
指定して、スタイルに WS_CHILD 付けとくほうが良くない?
671645:04/07/15 17:40
>>658
オセロを作っているんですがゲーム中に打った手をlogに書き込んでいくのですが、
そのlogを保存したいんです。
保存ダイアログボックスを表示させてその棋譜を保存したいんです。
>>671
OPENFILENAME構造体のメンバ調べた?
ファイル名やフルパス取得できるでしょ。

そのlogの出力処理は自分で書かなきゃダメだよ。
673645:04/07/15 18:38
>>672
開くの場合開きたいファイル名やフルパスを取得できるからその後の処理はできるなぁ
となんとなく分かったのですが、保存の場合がいまいち分かりません・・・。
例えばオセロというフォルダにオセロ本体とlogというファイルがあった場合、
どの関数でlogを見つけてその中身を別名保存できるのでしょうか・・・。
>>673
うーん、もう少し頭の中を整理したほうが良いと思うよ。
取り敢えずオセロの棋譜から離れろ。

データをファイルに保存する処理で必要な条件をきちんと挙げてみな。
取り敢えず、

(1)メモリ上にあるデータをファイルに出力したい。
(2)フォルダとファイル名は保存ダイアログを表示して選択&入力したい。
(3)フォルダに同名のファイルが既にある場合は別名保存したい。

と言う事か?なんか微妙に違ってそうな気もするんだが…
コンソールアプリケーションの出力をウインドーズのウインドーにする方法教えてください
16ビットと32ビットの両方のcomファイルとかも表示したいです
出来ないと思うけどコンソールアプリケーションを起動したときにコンソールを出さないでできたら
またそのやり方もおしえてください
まともなオセロが作れるんならファイル保存くらい簡単だろうに・・
まあオセロの方がまともじゃ(
単に保存ダイアログの出し方がわからんのじゃないか?
>>678
いや、それは>>646が書いてる。

>>673
もしかして、オセロのexeのパスを知りたい?
なら、GetModuleFileName()。
Win32スレっぽくまとめると、

・オセロのプログラムのコード内で、実行ファイル(たぶん EXE?) のパスを知りたいときには
 GetModuleFileName(NULL) を使う。
・実行ファイルと同じ場所にあるファイルのパスを得るには、
 PathRemoveFileSpec で最後の「ファイル名」を取り除いてディレクトリのパスを得て、
 PathAppend でそのファイルの名前をくっつける。

例えば既に実行ファイルと同じディレクトリに "log" という名前のファイルがあったとき、
それを lpszDstPath にコピーする関数は、

void CopyLogFile(LPCTSTR lpszDstPath)
{
 TCHAR rgszLogFile[MAX_PATH];
 GetModuleFileName(NULL, rgszLogFile MAX_PATH);
 PathRemoveFileSpec(rgszLogFile);
 PathAppend(rgszLogFile, "log");
 CopyFile(rgszLogFile, lpszDstPath, FALSE);
}
>>679
>>645を見るとダイアログを表示してファイルを指定したがってるようだが・・・
でもlogって名前で決め打ちなんだよね。
ダイアログ開く必要ないじゃん。
マルチバイトとUNICODEを切り替えるのに使うマクロは

標準ライブラリは _UNICODE
WindowsSDKでは UNICODE

であっていますか?
標準ライブラリってのがC/C++のことなら、一般的にいって知るかヴォケ
>>676
>コンソールアプリケーションの出力をウインドーズのウインドーにする方法教えてください
GUIアプリケーションとして作り直せ。

>16ビットと32ビットの両方のcomファイルとかも表示したいです
意味がわからん。既存のプログラムの表示方法を変更するという意味なら、
そのプログラムをそのように作り直せ。

>出来ないと思うけどコンソールアプリケーションを起動したときにコンソールを出さないでできたら
>またそのやり方もおしえてください
起動後にFreeConsoleでコンソールを切り離せ。
>>676
パイプを作ってそこへ標準出力(必要なら標準エラーも)をリダイレクトさせ、
CreateProcessで対象のコンソールプログラムを起動させる。
(この時に標準出力を継承させる。コンソールを表示させない指定もここでできる)
あとは随時パイプから読み出した文字をウィンドウへ書き出す。
>>683
含みを持たせすぎる問いには答えにくい。

UNICODEマクロは、WinAPIのA(ANSI)系とW(WideChar)系を切り替えるマクロ。

_UNICODEマクロは、汎用テキストマッピングで使用する文字の種類を切り替えるマクロ。
これはVC付属のCライブラリの他、MFC等でも使用される。
688683:04/07/15 21:37
>>687
ああなるほど。
TCHAR等とAPIのA系W系の切り替えは
UNICODEマクロで同時に切り替わるものだと思ってました。
↓こういうのをWin32APIで作りたいんですが
ttp://www.aajp.jp/exev5/speech.swf

adobe reader や narrator.exe みたいに、指定した文字列を
読み上げさせるにはどうすればいいのでしょうか?
>688
TCHARとA/Wは同時切り替えしないとコンパイルエラーになるだろう。
ぶっちゃけ、古いコンパイラとの互換性維持のためにあるんじゃねーの?
>>690
互換性維持のくだりは意味不明だけど、両方セットして切り替えるのが普通だろうね。
実際に切り替えるには、そのマクロ以外にもあれこれ変更する必要があるから、
けっこう面倒くさかった記憶がある(スタートアップ関数も変更したな、確か)。
693690:04/07/15 22:04
>692
_inlineと__inlineとか、_asmと__asmとか、
その辺を想像して書いたんだが…。
>>688
winnt.hのTCHARとかはUNICODEで切り替わる。
_UNICODEで切り替わるのはtchar.hの_TCHAR類。
695689:04/07/15 22:06
>>691
おお!きっとその辺です。
ありがとうございます。
696デフォルトの名無しさん:04/07/15 22:23
>>685
方法を知らないなら、くだらん回答しなければいいのに
>>696
なんとまあパターンどおりの厨房レスなのか。
自分の質問が質問の体を為してないことぐらい気づけよ。
コンソールベースのテストプログラムから脱却してウィンドウを作ってみたいのか、
古いDOSベースのプログラムをWindowsに移植でもしたいのか、意図がはっきりしてないんだよ。サトリ募集中ですか?

字面どおりに解釈するならパイプでも使ってそのプログラムを起動し、出力をとってからDrawStringでウィンドウに出力結果を描画とか。

これで後で「釣れた」とか抜かしやがったらふざけるのも大概にしろって感じだな。
最初から意味が分からんとだけ書けばいいものを。
699デフォルトの名無しさん:04/07/15 22:46
ツレタ!!
見事に釣られたところで次の質問者ドゾー↓
>>697 ( ´,_ゝ`)プッ・・

上級者ぶって偉そうにしたかっただけなのね。
素直にパイプを使うと答えればいいものを。
CreateCompatibleDCでつくったDCについてる
ビットマップはストックオブジェクトです。
703ほんたま:04/07/16 00:07
おみゃ〜らよ、おみゃ〜らさーん♪
おりはよ、「Slim de Can」を使ってやっとメインウィンドウにコントロールをつけるサンプルの作成に成功したぜ。わはは♪
「Slim de Can」ってすげ〜な〜、イベントドリブンプログラムが作成できるとこまでついに進化したよ。
おりはもう神だね♪どうよ?

http://hp.vector.co.jp/authors/VA015412/
704645:04/07/16 00:12
えっと分かりにくくてすみません・・。
オセロの盤面はboard[8][8]の配列を作ってそこに黒、白を書き込んでいく。
それと同時に1手目はd5黒、2手目、・・・・という具合にlogファイルに書き込む。
このlogがなぜあるかというと戻りや棋譜を読むことによってあとで感想戦みたいな
物を実装するためにあります。このlogは常に1個しかなく、上書きされていきます。
保存しておきたい対戦の場合はこのlogをダイアログを表示させ、別名にて保存します。
今分からないのはダイアログを表示させ、保存を押した場合何が保存されるのかが
分からないって事です。

680さんの方法のPathRemoveFileSpecとPathAppendでできるのかな・・・
>>704
> 今分からないのはダイアログを表示させ、保存を押した場合何が保存されるのかが
> 分からないって事です。

だからね、保存を押した時に何が保存されるのかは、君が書くコード次第なの。

>>646を実行して、>>672を調べたら、ファイル名とフルパスが取得できるから、
logってファイルをリネームすればいいんじゃねぇの?

と、君以外のみんなが思っている筈なんだが。
開くダイアログも保存ダイアログもファイル名を得るだけだろ
なんで前者は分かるくせに後者は分からんのよ?
707645:04/07/16 00:31
>だからね、保存を押した時に何が保存されるのかは、君が書くコード次第なの
そのコードが知りたかったんです・・・。

ファイルを開くの場合はファイル選択→開く→ファイル名、フルパス取得。
ファイル保存の場合はPathRemoveFileSpecとPathAppend→ファイル名、場所→保存
でいいんですか?
久々にすごいのが現れたな・・・

そもそもファイル入出力はやったことがあるのだろうか。
>>707
1.GetSaveFileName()を実行する。
2.保存ファイルを指定するダイアログが出る。
3.ユーザーがファイル名を入力する。
4.1で引数として渡したOPENFILENAME構造体からファイル名を取得する。
5.そのファイルに保存する処理は君が書く。

オセロのログを出力するAPIなんてないから、
出力したいフォーマットに合わせて自分でコード書くんだよ。
と言うか、”Log”ってファイルを出力するコードは自分で書いたんだろ?
なんで別名保存する事に躓くんだよ(´・ω・`)

まさかとは思うが、”Log”ってファイルを出力するコードを他人が書いてる
ってオチじゃねぇだろうな?
711645:04/07/16 00:42
今までAPIをやった事がないんですよ。演習で初めてAPIを使う事になり、
猫でもわかるを買ってよんだんですがいまいち・・・。

いろいろ教えてもらいありがとうございました。
教えてもらったので一度プログラムに組み込んでみます。
つか、API以前の問題だと思うなぁ。

そうは思わないか?>>713
713645:04/07/16 00:46
>>710
えーっとLogってのはオセロを起動すると勝手に作られます。
別名で保存するってのは将棋とかと同じく棋譜を集めるためと、
保存した場所からスタートできるようにするためです。
>>713
そのLogってのには一手打つ毎に保存されてんの?
もしそうなら、ユーザーに保存ファイル名入力させて
Logファイルをコピーすればいいのでは?

「猫でも・・・」ならネットのSDK編の第329章でも参考にしてみ
>>713で思考の呪いに掛かってしまった…

ムネン アトヲ タノム

orz

716645:04/07/16 00:57
>>714
そうです1手目から60手目まで保存されます。
これを使って感想試合や戻りなどできるようになります。

>もしそうなら、ユーザーに保存ファイル名入力させて
>Logファイルをコピーすればいいのでは?

これができればいいんです。 保存ウィンドウの表示→ファイル名、場所記入→
保存をしてLog1みたいな感じで元のLogがコピーできれば作れればOKです。
情報隠しすぎだねぇ。他人が書いたものと自分が書かなきゃいけないものを
きちんと提示しないから話がややこしくなると言うのに。
オセロってのはあれか、既にオセロのソフトが存在しているのか?

で、そのソフトがLogってファイルを作るんだけど、そのファイルを
別名保存するアプリを作りたいって話なのか?



単に別フォルダにでもコピーすればいいやん、って気がしてきた…
俺は答える気なくした。他のひとよろ。
俺はもう寝るぽ(´・ω・`)
>>645は最高の釣り師だな。
よくやった。
>>721
一昨日のVB6スレと言い今日といい、最近は疲れる奴が多いな…

夏だからか?
723645:04/07/16 01:22
いろいろすみませんでした・・・。

これで最後にします。

C書いたオセロではDOSでしか動きません。それをAPIを使って普通に
windowsのアプリに変換というか作るというか。
Cならif文でも使ってLogのコピーをリネームしてすぐ作れますが、
APIを使った時には保存ボタンをクリックしたらどうなるとかそういうのが
分からず困っていたという話でした。

714さんが教えてくれた所は結構参考になりそうなので助かりました。

不愉快になられた方々すみませんでした。またこんな自分に付き合って
くださった方々ありがとうございました。


mallocの変わりにGlobalAllocを使うメリットってなんかありますか?
(クリップボードとかとは全然関係ない単純なメモリ確保です。)

担当者になんで?って聞いたらmallocより効率がいいと
えらい人にいわれたらしい。GlobalReAllocとかも使ってる。

MSDNには低速だから使うなって書いてあるし。
強いていうならC/C++で確保したメモリをDelphiで開放するようなことができる。
>>724
ヒープメモリってわかってる???
727デフォルトの名無しさん:04/07/16 02:17
APPのコードをライブラリ化。
長文ソース簡略化で作業時間、効率を削減。

基本的なWin32システムを支援します。

最強のACライブラリー
ttp://www.geocities.jp/osoftjp
そこでHeapAlloc()ですよ
729デフォルトの名無しさん:04/07/16 04:17
WM_MOVINGとWM_SIZINGが発生する要因はSendMessage系で呼び出さない限り
ユーザーのマウス操作によるものだけと断定して問題ないでしょうか?
ALT+SPACE+S→カーソルキーの存在は無視か?
731デフォルトの名無しさん:04/07/16 04:44
MFCフレームワークで、CWinApp, CMainFrm, CChildView という派生クラスを使う事を強要されますけど、どこにどういう機能を置けばいいのかいまいちピントきません。
リアルタイムでレンダリングするスクリーン、キー入力、パラメータ入力用のダイアログがあるので,
CWinApp -> OnIdle() レンダラーアップデート, CChildViewへの描画。
CChildView -> キー、マウス入力
CDialog -> CMainFrm::hoge->SendMessage(...) で入力パラメータを送る。
CMainFrm -> SendMessage(...)でクラス間のデータ受け渡し。
っていう感じでやっているんですが、クラスが保持している別クラスインスタンスへのポインタがprotectedになっていたりするので、SendMessage()のバケツリレーみたいになったりして、2度手間3度手間が多くて疲れます。
「プロはこうやる」っていうのがあったら教えてください。
その前に良い事を教えてやる。

 ス レ 違 い だ
733729:04/07/16 05:47
>>730
そんな機能あったですか、、、
やりたいことはサイズ変更中であれ位置変更中であれマウスが動いてたら
WM_MOUSEMOVEが発生して欲しいのですが発生してくれません
正確にいうとspy++上では発生してることになっているのですがWndProc内のswitch文で捕捉されません
spy++のメッセージ コードはPとなっていて、ヘルプによると
PostMessage 関数によってキューにポストされました。
とあるのですがPostMessageで発行されたメッセージはWndProc内では捕捉されないのでしょうか?
734731:04/07/16 08:13
>>732
ほんとだ、Win32じゃん。誤爆しました。MFCスレに落としてきます。
>>723
おまいさんの最大のミスは

>C書いたオセロではDOSでしか動きません。それをAPIを使って普通に

を最初に言わなかった事だ。お陰で大勢の膨大な時間が
無駄に失われてしまった…
DLLから全体をフックするのはフックプロシジャーもDLLに無いとできませんか?
737デフォルトの名無しさん:04/07/16 11:43
USBメモリのシリアル番号を取得するAPIを教えて
738デフォルトの名無しさん:04/07/16 11:55
>>737
getDeviceID
>>737
デバイスデスクリプタを取得して、
iSerialNumberからストリングデスクリプタのインデックスを計算

iSerialNumberを元にストリングデスクリプタを取得すると、
シリアルナンバーが手に入る・・・と思う

↓のMass Storage参照
http://www.usb.org/developers/devclass_docs

やったことないけど、
DDKのサンプルのUSBView(Win32アプリ)見れば、何とかなるんじゃない?

>>738
デバイスIDとシリアル番号は別物じゃないか?
複数台繋がったキーボードからキー入力を受け、どのキーボードから入力されたのかを
判定したいのですが、どのようなAPIを利用すれば実現出来るのでしょうか?
USBキーボード二台(もしくはPS2キーボード1台+USBキーボード1台)を使っての入力を想定しています。
出来ない
742ほんたま:04/07/16 13:54
おみゃ〜らよ、おみゃ〜らさーん♪
おりはよ、「Slim de Can」を使ってあるボタンをクリックしたらある処理を行わせ、別のボタンをクリッしたら別の処理をおこなわせるプログラムの作成についに成功したよ。
つまり「Slim de Can」はすでにイブントドリブンプログラムがつくれる環境になっているということを自ら証明したという次第よ。
おい、「Slim de Can」はすでに簡単なゲームくらいはころっとつくれるぞ。誰かつくらんか?
「Slim de Can」ってすげ〜な〜。
おりはもう神だね♪どうよ?

http://hp.vector.co.jp/authors/VA015412/
新たなキチガイの登場か
無理ですか・・・。DDKまで降りていけばなんとかなりそうなので色々調べてみます。
降りるとかいうな馬鹿
>>745
同僚とうまくいってます?ある程度イメージ化した話が通じる人でないとこの業界ではうまくやれないと思うんですが・・・。
通じてはいるだろ
人の心配をする前に自分の(ry
749729:04/07/16 14:42
クライアント領域をマウスが移動して発生したWM_MOUSEMOVEも
spy++のメッセージ コードはPとなっていてこちらはWndProcで捕捉できていました
WM_SIZNG,WM_MOVING直後にspy++上で観測されているWM_MOUSEMOVEだけがWndProcで捕捉できません
spy++が嘘をいってるとしか思えないのですが、WndProcでも補足できる方法はありますか?
>>749
GetMessage で取ってきて

・DefWindowProc を呼ばない(メッセージを取り除いちゃうかもしれないから)
・TranslateMessage も呼ばない(同様)
・DispatchMessage もしない(同様)

で試してみた?
サイズ変更/移動中って、システム内部のローカルなメッセージループに
いるんじゃないのか?
752729:04/07/16 15:09
>>750
GetMessageで取ってきてCallWindowProcで直接呼び、WM_SIZNGとWM_MOVINGはretun TRUEとし
DefWindowProcを呼ばないようにしたのですがだめでした

>>751
しかしながらspy++はサイズ変更中や移動中であってもWM_MOUSEMOVEを検出できているのですが
ローカルなメッセージループにフックのようなものを仕掛けているのでしょうか?
DLLはparagma dataを使わないで変数をプロセスと共有するにはプロはどうやるのですか?
別プロセス?
それならファイルマッピング
同プロセスです
JoyAdapterのような、キーボード入力等を他の入力にするプログラムを作っているのですが、
非アクティブ状態のプログラムでどうやってキーの入力を受け取れるのでしょうか?
DLLフックに決まってるだろ
>>755
普通にアドレス渡せ
>>758
例えばDLLの中の変数をDLLメインで宣言定義して、その変数のポインターを
DLLメインの戻り値でWINメインに渡して使うということですか?
それともそれ以外に便利な方法ありますか?
//dll.cpp
int var;

int* getvar()
{ return &var; }


//exe.cpp
int* pvar = getvar();
よくわからんけど、__declspec(dllexport)、__declspec(dllimport)は
使っちゃいけない話になっているのか?
素直に __declspec(dllexport) でいいじゃん。
//dll
struct vars { /* 色々 */ };
vars* init() { return (vars*)malloc(sizeof(vars)); }
void func(vars* p) { /*色々*/ }
void term(vars* p) { free(p); }

//exe
vars* p = init();
func(p);
term(p);

とか。
>>760 761 762 763
やっぱDLLの中の変数はグローバル変数じゃないと駄目にきまってますよね?
オート変数はどうやっても無理だが。
staticでもっておく。うげぇっ。
__declspec(dllexport)、__declspec(dllimport)でどうやってデーターを共有するんですか?
これはDLLの関数がDLLにあることをコンパイラに知らせる命令ですよね?
関数だけじゃねーよ
ちょっとは調べてみないんですかそうですか。
>>767
それが気に入らないんなら、DEFファイルに書いて
変数のエクスポートでも出来ると思うが。
変数もエクスポートできるんですか?
dll
__declspec(dllexport)int a=3;
exe
__declspec(dllinport)int a;
のように使えるとはしりませんでした
しらべてみて分からなかったらまた聞くと思います
いろいろ質問ありがとうございました
771教えてください:04/07/16 19:04
MCICreateWnd()で作ったウィンドウの親ウィンドウ内での表示座標を
変える方法はないでしょうか??
どーしても動画と同じウィンドウ内にアレコレ表示したいので
動画を再生する領域をちょっとずらすか親ウィンドウ内に他のものを表示
する空間を空けたりしたいのですが
どうすりゃいいのか途方にくれとりまする助けてえ
HBITMAPをファイルに保存する場合は、どのようにしたらよいのでしょうか?
そろそろ埋めるよ
>>773
に釣られて、梅。
HDCをファイルに保存したのですが、読みこもうとしてもうまくいきません。
どうしてくれますか。
>>775
( ´,_ゝ`)プッと嘲笑って差し上げます。
windows.h とiostreamなどの標準ライブラリーは一緒に使うのは普通ですか?
>>771
MoveWindow ではダメですかそうですか。
>>777
問題ないはず
windows.h とiostreamなどの標準ライブラリーは、どちらを先にインクルードしたらいいんですか?
windows.hは最初に
どっちでもいい。
順番が問題になるのはwindows特有のヘッダのみ。
例えば
×
#include <hidsdi.h>
#include <windows.h>


#include <windows.h>
#include <hidsdi.h>

のように。
stringは便利そうですよね
724です。

>>725
やっぱ、Cでは普通のメモリ確保はmallocで決まりですよね。

メモリ確保の他にも、WIN32とランタイムルーチンで対応する関数がある場合に、
好んでWIN32を使う人がいますが、理由を聞くとAPI直接呼んだほうが
効率がいいからということをいいます。これってどこまでほんとうなんでしょうか。

fopenの代わりにCreateFileとか使ってると私は、なんで?と思ってしまうのですが。



>>784
普通はHeapAllocする
現実に有意な差があるかといわれれば無いが、fopenにしたところで最終的にはCreateFileなんかを呼んでいる訳で、かすかであれ効率がいいのは事実ではあるな。
メモリはランタイムがブロックのプールをしている可能性もあるから
ネイティブ呼び出しが早いとは限らない。
ファイル読込もfopenがバッファリングしてますな。
プールも結局失敗するならやらないほうが効率よかったりもするが。
>740
DirectInput
>>784
コンソールプログラムのことを言ってんのか?
おまいは、Windowsプログラマーじゃないだろ。
COMとか、書いたことないのか。C runtime使いたくないんだよ。

Windowsプログラムなら、Win32APIを使うのが普通だろ。
Cライブラリ=コンソール環境ではない。
Cライブラリを使わないスタイルを否定はしないが、無根拠にそれが普通とかいうと蹴飛ばすぞ。

そういえば、CライブラリのMS固有関数って、このスレの範疇?
793デフォルトの名無しさん:04/07/17 10:58
>>791は厨房プログラマー
794デフォルトの名無しさん:04/07/17 11:05
C++ライブラリーのほうがいいのにCライブラリーをあえて使うわけはなぜですか?
釣れた!
>>795
C++のも、Cランタイムライブラリに含まれているわけですが・・・
最近、面白いのが多いね
>>797
Cはprintf() c++はcoutを使う
>>799
そういう意味じゃないって・・・
グローバルフックのプロシジャーはグローバルフックをしておけば
本体で別のことしてる間も勝手に実行されるマルチスレッドみたいなものですよね?
ポップアップメニューの文字の高さを変更するにはどうしたらいいの?
>>800
というか>795に意味が含まれてないから誰もコメントできないかと
グローバルフックは結局DLLのインスタンスハンドルだけを取得すれば
winmainの中でもグローバルフックできるんですか?
>>801
グローバルフックの場合は本体とフックプロシージャのスレッドは異なるが、
そもそも各スレッドの存在するプロセス空間自体が違うので、
マルチスレッドというよりはマルチプロセスというほうが近い。

>>804
必要な情報さえ集まるのであれば、フックを仕掛けるの自体はどこででも。
コントロールキー押したまま文字キーを押したことをウインドプロシジャーで処理するにはどうやりますか?
GetKeyStateか、よくわかった
808デフォルトの名無しさん:04/07/17 15:53
APPのコードをライブラリ化。
長文ソース簡略化で作業時間、効率を削減。

基本的なWin32システムを支援します。

>>807 GetAsyncKeyStateもちゃんと乗ってまうs!!!

最強のACライブラリー
ttp://www.geocities.jp/osoftjp
おい、まだ腐ったJavaScript破棄してないのかよ。ダサダサで無駄に敵を増やすだけだってのが分からないのか?
効率を削減。効率を削減。効率を削減。効率を削減。
>>809
うむ。自分としては、
猫プロ、創プロみたいな、ただソースのページに飛ぶシンプルなのがいい。
812デフォルトの名無しさん:04/07/17 23:24
GetAsyncKeyStateもちゃんと乗ってまうs!!!
のってマウス
814デフォルトの名無しさん:04/07/18 00:06
APPのコードをライブラリ化。
長文ソース簡略化で作業時間、効率を増幅。

基本的なWin32システムを支援します。

>>807 GetAsyncKeyStateもちゃんと乗ってまうs!!!

最強のACライブラリー
ttp://www.geocities.jp/osoftjp
作業時間を増幅すんのか。おじちゃん嬉しくて差し戻しちゃうよ!

あまりにもしつこいので見てみたよ。

結論:使い物にならないクズ。
>>814
あぼーんし辛いからコテ使ってくれないかな?
URIであぼーんしろよ
819デフォルトの名無しさん:04/07/18 08:34
どうしてもWM_LBUTTONDOWNがきた時点でヒットテストとかをしてキャプションをドラッグしてるように
みせかけたいのですがどうしたらよいでしょうか
WM_LBUTTONDOWNがきたらSendMessage(hwnd,WM_NCLBUTTONDOWN,HTCAPTION,screenpos)としてるのですが
うまくいきません
821819:04/07/18 09:00
>>820
WM_NCHITTESTでは適当にHTOBJECTとかでも返して
WM_NCMOUSEMOVE,WM_NCLBUTTONDOWN,WM_MOUSEMOVE,WM_LBUTTONDOWNなどで対応したいのです

WM_NCHITTESTでHTOBJECTを返すと、とりあえずノンクライアント領域と判断されるらしく
WM_NCMOUSEMOVE,WM_NCLBUTTONDOWNなどのノンクライアント領域用メッセージが送られてきてそこで独自の
ヒットテストをおこなっているのですが、それだとボタンコントロールが押された、離されたなどの
処理がされなくなってしまいました.そこでWM_NCHITTESTでHTCLIENT以外だったらHTOBJECTを返し
HTCLIENTだったら素直にHTCLIENTを返すようにしました.そうすると今度はHTCLIENTだった場合に
WM_MOUSEMOVE,WM_LBUTTONDOWNなどのクライアント領域用メッセージが送られてきた時点ヒットテストなどをしなければ
HTCAPTIONだのHTTOPだのと偽れなくなってしまい、このような質問をさせていただきました
非常に文章がわかりずらくなってしまってすいません
>>819
>キャプションをドラッグしてるように
と書かれているので、別にキャプションを右クリックして出てくるメニューは必要ない?

もしそうであるなら
WM_LBUTTONDOWNの時にGetCapture(hwnd)でマウスをキャプチャーして
WM_LBUTTONUPされた時にReleaseCaptureしてMoveWindowなどで移動するといいんじゃないかな
823デフォルトの名無しさん:04/07/18 10:21
質問です。
少し大きめのアイコン(24×24ぐらい)が表示されるツールバーを作りたいのですがよく分かりません。

IDB_STD_SMALL_COLORをつかって標準ビットマップを使う方法は分かったのですが、
自分で用意した画像を使ったその方法が分かりません。

どなたか教えてください。
(ちなみにツールバーを作る時はCreateWindowExを使っています)
824デフォルトの名無しさん:04/07/18 10:33
CryptAPIで証明書ストアに関する説明が載っている
日本語サイトってないでしょうか?
>>824
英語嫁ばいいじゃん。
>>823
LoadBitmapとか?
>>823
>自分で用意した画像を使ったその方法が分かりません、というのは、
ビットマップの大きさを指定する方法がわからないのか、
ビットマップを読み込む方法がわからないのか、
何がわからないのかわからないのか、
そもそも何がわからないんだ。
828823:04/07/18 11:01
いや画像の表示は出来てます。

問題はボタンが自分が指定したいサイズより小さいことです。
だからその指定方法を教えて欲しいです。
829823:04/07/18 11:18
あ・・・TB_SETBITMAPSIZEを送ったら出来ました。
お騒がせしてすいませんでした(汗
>>829
よかったよかった
おめでとう
831819:04/07/18 13:04
>>822
すみません
今後HTSYSMENU,HTMINBUTTON,HTMAXBUTTON,HTCLOSEなどのヒットテストにも対応したいと
考えているので、SendMessageなどでメッセージを送るなどして具体的な処理はシステムにお任せみたい
な感じでお願いします.
832デフォルトの名無しさん:04/07/18 13:12
APIの質問とはちょっと違うかもしれませんが
MSDNでPSDKをDownloadした後
フォルダ削除したら
UnInstallは出来たのですが
ReInstall出来なくなってしまいました
どうすればいいでしょうか?
>>832
質問する場所が違いそうなので
こちらで質問するといいと思います

VisualStudio.NET(MSDN Deluxe) Part13
http://pc5.2ch.net/test/read.cgi/tech/1083995297/
>>819>>831
なんでそうする必要があるのかかいた方がいいよ。
もっと簡単な実現方法があるかも試練から。
>>832
間違えた、こっちかもしれない
スレが落ちてるからageて質問してみてくれ

MSDNサブスクライバ【トラブル解決スレ】
http://pc5.2ch.net/test/read.cgi/tech/1081505326/
>>831
元々普通にウィンドウを作成すれば
HTSYSMENU,HTMINBUTTON,HTMAXBUTTON,HTCLOSEなどのヒットテストには対応してるので
具体的な処理はシステムにまかされてます
837デフォルトの名無しさん:04/07/18 13:28
>>835
誘導ありがとうございます
>>836
メニューとかエッジとか付いてない窓作って自前でその辺を描画するとかそんな用途なんでは無かろうか。
まぁ、834への解答次第か。
839819:04/07/18 14:13
>>834
GUIライブラリみたいな物を作ろうとしていて将来的にはクロスプラットフォームなものにしたいと
思っています.既存のクロスプラットフォームGUIライブラリ代表としてfox toolkitをすこし調べたのですが
HitTestに対応するものがないように思えます.ここから勝手な想像なのですが、XウィンドウシステムでHitTestなど
の処理をするのはかなり面倒だからHitTestがないと推測しました.
そのような処理のむずかしいものをひとつのイベントとして定義するより引数として渡すほうが
いいと判断しました.
具体的には
struct mouse_eventargs:base_eventargs
{ unsigned int button,hittest; long x,y; };
こんな感じのものを参照渡しでユーザー定義のコールバック関数に渡しその中で
ユーザーがhittestにキャプションや最大化ボタンやサイズ変更境界などを表す定数を
代入して偽るみたいな感じなのですがWM_NCMOUSEMOVEなどのノンクライアント領域用と
WM_MOUSEMOVEなどのクライアント領域用のメッセージは同じコールバック関数onMousemoveを
呼び出す形になっています.そこでクライアント領域用のメッセージでもヒットテストなどを
してやることが必要になってしまいました

>>836
そのはずなのですが819のようにデフォルトのHitTestがHTCLIENTと判定しWM_LBUTTONDOWNが送られ
てきたところでSendMessage(hwnd,WM_NCLBUTTONDOWN,HTCAPTION,screenpos)としてもキャプションを
操作してることにはなってくれませんでした
まさかお前は>>814か?
841デフォルトの名無しさん:04/07/18 14:23
CreateWindow関数の第一引数ってシステムクラスを使うときのためにあるって認識でいいですか?
あ、RegisterClassで登録したWNDCLASSEX 構造体のlpszClassNameを読み出すためにもあるんですよね?
SendMessage(hwnd,WM_NCLBUTTONDOWN,HTCAPTION,screenpos)


SendMessage(hwnd, WM_NCHITTEST, HTCAPTION, screenpos)じゃだめ?
>>841-842
RegisterClassで登録したウィンドウクラスを使うためには第一引数で同じ文字列を入れなくてはいけないってこと
>>844
グラシアス
>>841
間違ってはいないが限定しすぎ。
本来的には、似た機能のウィンドウを複数作る時に手間を省くためにある。

WindowClassはウィンドウの型紙で、CreateWindowは型紙を元にウィンドウを作る。
BUTTONあたりはシステムで型紙用意してくれているのでそれ使ってCreateWindowすればいいし、
1から自分でウィンドウ作るなら自作のWindowClassをRegisterClassで登録してCreateWindowする。
システム製でも自作でも、型紙部分は一度登録しておけば何度も使いまわせる。

C++知ってるなら、WindowClassは文字通りウィンドウのクラスで、
CreateWindowはそのクラスのインスタンスを作るもの、と思えば分かりやすいかも。
(この場合のインスタンスはHINSTANCEとは別の概念だから間違うなよ)
>>846
メルシー
848819:04/07/18 15:49
できたーーーwwヘ√レvv〜(゚∀゚)─wwヘ√レvv〜─ !!
>>840
ちがいますよ(w
>>843
WM_LBUTTONDOWNがきたら
CallWindowProc(c->defwndproc, c->handle, WM_MOUSEACTIVATE, 0, MAKELPARAM(HTCAPTION,WM_LBUTTONDOWN));
としたらできました.
レスしてくださった皆さんありがとうございました
849819:04/07/18 16:06
っとおもったら
case WM_NCHITEST:
   return HTCAPTION;
を消し忘れてただけでした.............
ダイアログベースのアプリケーションで、
仮想キーコードを文字として表示したいのですが、
どうやって変換すれば良いのでしょうか?
>>851
sprintfで文字列に変換して表示すれば?
0-9、A-Zなら仮想キーコード=ASCIIコード、そのまま
じゃなきゃMapVirtualKey

それ以外のキーを文字で表示したくて
LPARAMが使えるならGetKeyNameText
駄目なら自分でマップ
lParam の何ビット目が1か0なのかを調べないといけない場合どうやるんですか?
>>854
&
>>855
もうちょっとヒントください
お願いします
>>856
&で解らないならC言語を一からやり直すべき
やってないならCをやるべき
>>857
Cもアセンブラもやったけど分かりません
教えてください
そんなエサで(ry
>>854

bool isNbitOn(unsigned lParam, unsigned n)
{
return (lParam >> n) & 1;
}
>>860
Nビット右にシフトして一番下のビット以外を0にするということですね
僕の考えでは0000100000みたいな2進数が使えないから出来ないと思ってましたが
そういう頭のいいやり方があったんですね
オーナードローをサポートしてないコントロールの描画をカスタマイズしたくて
サブクラス化してWM_PAINTを乗っ取りたいのですが、
このときコントロールを描かせるためCallWindowProcで元のwndprocを呼び出した後
BeginPaint等をしても、当然更新領域が空なので描画可能なHDCが取得できません。
このばあい、GetDCして独自の絵を上書きするのが正しいのでしょうか?
>>861
いや、0000100000(何ちゅービット数だ)を作りたいだけなら 1 << 5 でいいんだけどね。
ビットチェックの場合は0/1にした方がboolとして扱えるから。
864851:04/07/18 19:40
>>853
できました!
ありがとうございます
>861 お前の頭が悪いだけだ。
>>863
それも頭のいい考え方ですね
あとすこしで電卓もって10進数に変換するところでした
・タスクマネージャなど、プロセスのメモリ使用量が見られるものを用意。
・VC++を使ってテンプレートよりWindowsの標準的なアプリケーションを作成
・そのままビルドして実行

実行直後のメモリ使用量は4MB程度で、最小化すると300KB程度まで減少、
再度表示させると1.2MB程度になってるわけで、こいつはなぜでつか?
最小化されたアプリはページアウトされるから
>>867
「仮想メモリサイズ」を表示させてみれ。
コールバックが沢山あるのですが、

LRESULT CALLBACK Age( HWND ...
LRESULT CALLBACK Sage( HWND ...
LRESULT CALLBACK Hoge( HWND ...

typedef LRESULT CALLBACK ( *HogePtr )( HWND, UINT, WPARAM, LPARAM );
const HogePtr HogeHagePtr[ ] = {
Age, Sage, Hoge,
}

のように関数ポインタにしようとするとエラーが出てしまいます。
どうすればいいんでしょうか?
>>870
typedef LRESULT (CALLBACK *HogePtr )( HWND, UINT, WPARAM, LPARAM );
の間違いじゃね?
872870:04/07/19 00:52
>>871
CALLBACKは括弧の中でしたか・・・勉強になりました。サンクス。
873デフォルトの名無しさん:04/07/19 02:14
SHGetFileInfoで取得したアイコンのハンドルはDestroyIconで破棄するべきでしょうか?
いろいろなサイトを見てみると破棄しろという記述を見ますが個人的にはしてはいけないような気がします。
理由は、MSDNに書いて有るSHGetFileInfoのSHGFI_ICONの説明で
> Retrieve the handle to the icon that represents the file and the index of the icon within the system image list.
とある為です。
システムイメージリストのアイコンなら削除してはいけないと思うのですが。
>>873
報告ごくろう。
下がってよいぞ。
>>873
すべき。つーかしろ。

こうも書いてあるが。
>The handle is copied to the hIcon member ・・・
このコピーは単なるコピーじゃなくてCopyIcon/CopyImageのコピー。
それにDestroyIconしろって下の方にあるし。
>>875
あー、MSのサイトには確かにそう書いて有りますね。
もってるMSDNは古いのか書いてませんでした。
Thx.
しっかし、
> The handle is copied to the hIcon member of the structure specified by psfi,
> and the index is copied to the iIcon member.
前者のcopiedと後者のcopiedの意味が違うなんて罠だ。普通、わからんぞ。
>>862
wParam == NULL なら BeginPaint で HDC を取得
SaveDC
CallWindowProc で元の WndProc を呼ぶ (wParam に HDC を入れる)
RestoreDC
追加の描画をする
EndPaint (BeginPaint を呼んだ場合)
return
879デフォルトの名無しさん:04/07/19 11:58
ネットワークを経由して他のパソコンの共有フォルダに
ファイルの作成とライトをしようとしています。
APIを使って実現するにはどうしたらいいですか?。
"作成と書き込み","クリエイトとライト"のどちらかに統一しる
881デフォルトの名無しさん:04/07/19 12:13
クリエイトでおねがいします。
それならCreateとWriteのほがいいと思う
ライトって見たら電気を思い出す低級魔術師でした
通信網を経由して他の端末の共有・・・
フォルダって何だ?
>>879
WNetAddConnection()
WNetAddConnection2()
WNetAddConnection3()
とか?そういう話じゃない?
>>879
CreateFile("\\\\コンピュータ名\\共有フォルダ名\\残りのパス"ってできない?
通常、フォントの幅(lfHeight)は0を指定すると思いますが
選択用のDCを作らずに幅を取得、または計算する方法ないでしょうか?
無い
ttfでも読んで解析すりゃええやん。
その解析方法を聞いてるんだろ
質問者がその態度じゃ誰も解答してもらえませんよ
穏やかにいきませう
>>888
ださいですね
質問がダサイ以上回答がダサくなるのは必定。
文字列の幅のサイズを測るAPIってなかったっけ?
あれはHDC必要なんか
BOOL GetTextExtentPoint32(
HDC hdc, // handle to DC
LPCTSTR lpString, // text string
int cbString, // characters in string
LPSIZE lpSize // string size
);
解決?
>>895

> HDC hdc, // handle to DC
だから、解決してないでしょ
Win32APIスレに質問してるんだし
HDCは使える環境であると仮定されてるんだし
HDC使えばいいんじゃね?

何か使えない理由でも?
>>893
文字幅じゃなくて、lfWidthに指定する幅を取得したいんですよ。
TEXTMETRICのtmAveCharWidthだと思うのですが。
lfWidth=0で作成したときとの比がWidth:Height=2:1のフォントを作成したいから、どうしても幅を取得したいわけです。
使いもしないオブジェクト(選択用DC、基準フォント)を作るのはどうも気が進まないので。
ぼくわホントクラスをつくて各インスタスごとにホントのハンドルと
互換ヂーシーのハンドルをもつようにしてす、
886=898で、他の人は関係ありません。
って言っても、この流れは止まらないか。
チャーリィ(あるじゃーn(ry)登場
>>898
くりえいとのときに固定ぴっちを指定するのはだめなんですか
このすれわなぜとまているのですか。
>>902の質問に答えてくれないからじゃないかな
905879:04/07/19 16:07
>>879です。

>>884>>885 レスありがとうございます。
今日は休日なので試せないので明日やってみます。
>>898
何がやりたいのかさっぱりわからん。

lfWidthが0だとフォントの都合のいい幅にしかならんから、
フォント次第では永遠にW:H=2:1になることなどありえんし、
第一可変幅フォントはどうするんだ? 固定ピッチしか考えてないのか?

説明不足すぎ。
>>906
全角:半角が2対1ではないです。
基準フォントと比較して幅が2倍になるってことなんですが、うまく説明できてませんでしたか。

基準フォント MS UI Gothic lfHeight=-n, lfWidth=0 で作ったフォントのサイズを Width=w, Height=h とすると、
作成したいフォントのサイズは Width=2w, Height=1hとしたいわけです。
固定ピッチでもプロポーショナルでも単純に横幅2倍のフォントを得たいのです。
もっとシンプルに

>lfWidthが0だとフォントの都合のいい幅にしかならんから

この都合のいい幅の2倍の幅が欲しいのです。
何?横倍角文字でも表示したいの?
>>909
ちょっと違いますが、そんな感じです。

基準の絵を横2倍に伸張したのでは解像度が低くなるので、
フォント作成の時点で横2倍のフォントが欲しいのです。
>>910
基準フォントって何?

アプリ起動時からDCに割り当ててあるフォントの話なら、普通にGetDCして幅取ればいい。
これに関しては他に方法はないだろ、DC以外情報持ってないんだから。
(それとも、GetDCしたくないがために、システム設定からフォント情報拾ってくる手間をかけるつもり?)

ただこの仮説だと、
> 使いもしないオブジェクト(選択用DC、基準フォント)を作るのはどうも気が進まないので
の部分が意味不明になる。幅取るだけならSelectFontの必要がないから。

自分で「基準として」設定したフォントなら、って、このケースはありえないよな。
自分で知ってるはずなんだから。

ますますわけがわからん。最初っから、省略なしで、説明しなおしてくれ。
>>911
lfWidth=0でCreateFontをした結果得られる最適な幅を持つフォントを基準フォントとします。
この基準フォントは、任意に選択可能であるものと思ってください。>>911で言う、自分で
「基準として」設定したフォントです。

で今回の質問ですが、この基準フォントの横倍角のフォントを作成したいのですが、
lfWidthに指定する値をどうやって求めればいいのですか?

その際、基準フォント自身は一切使われる事が無いので実体はありません。



>自分で知ってるはずなんだから。

知らないから、それを得る手段を探しているのです。
SetWindowsHookEXの引数のWH_KEYBOARD_LLがwindows.hはincludeしてあるのに使えません
なぜ使えないのですか?
教えてください
ターゲットバージョン未指定じゃないのか、と脊髄反射
(>>912の続き)

LOGFONT lf;
CHOOSEFONT cf = { sizeof(CHOOSEFONT), 0, GetDC(0), &lf, 0, CF_SCREENFONTS };
::ChooseFont(&cf);
lf.lfWidth = ???;
::CreateFontIndirect(&lf);

倍角フォントを作成するために、
???でするべき事を教えてください。
そーいえば2000とかじゃないと使えないとマイクロソフトにかいてありました
どうやってターゲットバージョンをしていしますか、おしえてください
#define WINVER 0x500←2000
#define WINVER 0x501←XP
#define WINVER 0x502←2003Sv(?)
#define WINVER 0x500
をwindows.hの前に定義するでいいんですよね
ありがとうございました
>>915
実際にフォントを作ってDCに選択しない限り、
何のフォントがマップされるかわからないし
平均幅だって知りようがないと思うよ。
ダメ元でEnumFontFamiliesでもしてみれば?
実際はNTシリーズなら全部対応してるんで、
#define WINNT
でいいのかもしれない(未確認)
>>919
作成した時点だけではなく、デバイスコンテキストに選択した時点で
使用されるフォントの本当の実体が決定されるって言う事ですか?
>>921
そう。

SelectFontしてDCに選択させるまで、フォントの「本当の」幅を得る方法はない。
なぜなら、CreateFontで作成するのはデバイスに独立した論理フォント、仮のフォントだから。
論理フォントをDCで選択することではじめてDCと物理フォントが結びつき、
その時点ではじめて物理フォントの幅が得られる。

物理フォントがどういうものになるかは、選択するデバイスの特性に依存する。
今のビデオカードのようなラスタデバイスなら論理フォントに近い属性のものになりうるが、
(これは極端だが)昔のキャラクタ端末のようなものなら論理フォントでどう指定しようと
物理フォントは特定の特性しか持ち得ない。
逆に、ベクトルプロッタなら「本当に」論理デバイスに忠実な描画ができる(かもしれない)。

こういうさまざまなデバイスを統一的に扱うことを前提としてGDIは設計されているので、
論理オブジェクトでできることはいろいろ制限がある。
GetDeviceCapsでも眺めれば、そんな歴史の遺物の一端がみられるよ。
>>883 ( ´,_ゝ`)プッ・・
Borland C/C++、WindowsXPです。

ISHELLFOLDER型のポインタのLPSHELLFOLDERで
EnumObjectを使いたいのですが

LPSHELLFOLDER *lpShellFolder;
SHGetDesktopFolder(&lpShellFolder);
lpShellFolder->lpVtbl->EnumObject (lpShellFolder,hwnd,
SHCONTF_FOLDERS | SHCONTF_NONFOLDER | SHCONTF_INCLUDEHIDDEN, &lpEnumIdList);

となってますが
エラー E2316 ex.cpp 129: 'lpVtbl' は 'IShellFolder' のメンバーではない(関数 __stdcall WndProc(HWND__ *,unsigned int,unsigned int,long) )
と返されてしまいます。
始めにshlobj.hをインクルードしてるので、shlobj.hの中身を読んで見ましたが
思わしき関数を見つける事が出来ませんでした。

Borland C/C++の場合はなんと言う名前なのでしょうか?
>>924
C++なら直接lpShellFolder->EnumObjectで行けるんじゃないの?
>>925
エラー E2316 ex.cpp 129: 'EnumObject' は 'IShellFolder' のメンバーではない(関数__stdcall WndProc(HWND__ *,unsigned int,unsigned int,long) )
と返されてしまいました
どうやら違うみたいです
>>924 EnumObjectじゃなくてEnumObjectsだが。
>>927
>エラー E2227 ex.cpp 132: __stdcall IShellFolder::EnumObjects(HWND__ *,unsigned long,IEnumIDList * *)
>の呼び出しに余分なパラメータがある(関数 __stdcall WndProc(HWND__ *,unsigned int,unsigned int,long) )
というエラーに進展しました
あとは自力で何とかしてみようと思います
お礼言うの忘れましてすみません。
有難うございました。
ついでにエラーも出ないようなったので報告
lpShellFolder->EnumObjects (hwnd,
SHCONTF_FOLDERS | SHCONTF_NONFOLDERS | SHCONTF_INCLUDEHIDDEN,
&lpEnum);

としました
Eventがシグナルか非シグナルかを調べるにはどうやればいいですか?
>>931
WaitForSingleObject(event, 0);
>>932
ありがとうございました
SetEvent()をグローバルフックプロシジャーの中でやっても
プログラムの中のWaitForSingleObject(event,INFINITE)が止まったままです
event handleをDLLに渡して使ってます
わかりません教えてください
>>934
Handle は作成したプロセスでのみ有効なので、作成したプロセスの PID を共有しておいて、
フックされたそれぞれのプロセスで DuplicateHandle して、当該プロセスで有効なハンドルを
得る必要があります。
>>935
はい、やってみます
ありがとうございました
>>934=931?
ようするに同期とりたい訳でしょ?
だったらウィンドウメッセージを使うと吉。
windows2000以降ならウインドウの透明化が簡単にできるらしいのですが、
98でも透明化することはできますか?
HBITMAPを使って、ビットマップのあるピクセルの
RGBを得るにはどうすればよいのでしょうか?
940デフォルトの名無しさん:04/07/20 17:50
FindFirstChangeNotificationでは、
監視するファイルの拡張子を指定できませんか?
>>938
Windows 2000 でできるようになった方法は、Windows 98 では使えない。
みーたんは知らん。

>>939
できる。

>>940
API を見ればわかる通り、できない。
>>938 APIの機能としては存在しない。自分でガリガリコード書く必要あり。
>>939 適当なDCにSelectBitmapしてGetPixelとか。
>>940 できない。NT系のみだがReadDirectoryChangesWでごそごそやる手はある。
943デフォルトの名無しさん:04/07/20 18:41
FindFirstChangeNotificationで拡張子指定は難しいですか。

では、ある程度の時間間隔でマージされたイベントを受信したいのですが、可能ですか?
可能だよ。自分で適当にイベント無視すりゃいい。
>>938
http://www.ksky.ne.jp/~seahorse/libgw/
例えばこんな外部のライブラリに頼るか、自分で実現するかしかない。
946938:04/07/20 20:11
お答えありがとうございました
mouse_event以外の方法で強制的にマウスをクリックさせたりする方法は無いでしょうか?
いま、ちょっとしたいたずらをするプログラムを書いています。
やりたい事は、

いきなりメモ帳が起動される。←これはできた。

自動的に"むだむだむだむだ"と入力され、変換される。うまくいけば"無駄無駄無駄無駄"になる。←これができない。



メモ帳のEDITコントロールにWM_KEYDOWNとWM_KEYUPを送ってみました。
たしかにメッセージが送られていることを、spy++を使って確認したのですが、なぜか文字が入力されません。
WM_SETTEXTという手もあるんですが、一文字一文字入力されていったほうがインパクトがあると思うのです。
一文字づつ文字を増やしてコピーというのも、変換の動作が出来ませんし

keybd_event()だと、アクティブでないといけないし、

どなたか方法を知りませんか?
>>948
WM_TIMER
「むだむだ」の上に「無駄無駄」を上書き
そーゆーいたずらプログラムは、自分で考えないと意味がない。
出来ないなら、いますぐやめろ。
951948:04/07/20 21:41
>>949
それ以前に、半角英数字すら入力できないのですが。

↓こんな感じです。aと入力したいのですが……

#define CHAR_A 0x41

SendMessage(notepadHwnd, WM_KEYDOWN, (WPARAM)CHAR_A, NULL);
SendMessage(notepadHwnd, WM_UP, (WPARAM)CHAR_A, NULL);
>>951
遊びみたいだからズバリは言わないでおくけど、Spy++でメモ帳をよーく見てみよう。
953948:04/07/20 22:05
× WM_UP
○ WM_KEYUP
>>951
面倒くさいことしなくても(WPARAM)'A'でいいだろ
955948:04/07/20 22:11
>>952
もっと、ズバリと手取り足取り教えてください。
頭が悪いのでspy++見てもわかりません。
956948 ◆e.MQo98ta. :04/07/20 22:14
>>955
偽者

>>952
やってみます。
SendInputとか使わないの?
誰か頭悪い漏れに教えて下され。
16bitカラーのスクリーンをキャプチャした時、BITMAPINFO::bmiColors にセットすべき、
3つのDWORD値はどうやって取得すれば良いのですか。
>>935
名前付きイベント作ったほうが簡単じゃね?
>>958
キャプチャって何? スクリーンのDCからBitBltしてきた物? キャプチャライブラリの出力?
bmiColorsは3つのDWORD値などではないが、いったい何をセットする気だ?
そもそもそのHBITMAPは何なのだ? キャプチャの結果? それともそのコピー先?

俺も頭悪いから、おまえさんが何をしたいのかさっぱりわからん。
bmiColorsに三つっていったら、BI_BITFIELDSの事だろうと想像は付くが。
そんなマンドくせーフォーマット使うよか、24bitで受けた方が話は早いと思う。
>>958
試してないけど、ドキュメントには、

BYTE bmiBuffer[ sizeof(BITMAPINFO) + sizeof(RGBQUAD)*3];
BITMAPINFO* pBMI = (BITMAPINFO*) bmiBuffer;
ZeroMemory(pBMI, sizeof(bmiBuffer));
HDC hdc = GetDC(NULL);
GetDIBits(hdc, (HBITMAP) GetCurrentObject(hdc, OBJ_BITMAP),
 0, 100, NULL, pBMI, DIB_RGB_COLORS); // 0と100は適当

とかすれば BITMAPINFO を得られるようなことが書いてある。
963デフォルトの名無しさん:04/07/21 12:43
VirtualAllocができない。
VirtualAlloc(NULL,512000000,MEM_RESERVE | MEM_COMMIT,PAGE_READWRITE);
メモリー3G、XP−SP1でできない
NT−SP6ならOKだ。誰か助けてくれ!
>>963
512MB近くの連続領域は運が良くないと取れないと思うぞ。

32bit Windows ではユーザプロセスは標準では 2GB の仮想空間しか持
てない。その中に不連続に exe や DLL がマップされる。

Windows 2000 以降だったら、3GB モードを使えば確保できる確率は上
がるかも。
ウインドウの外枠を透明にすることってできますか?

子ウインドウの枠を消していろいろやりたいんですが・・・
WS_POPUP
>>966
ありがとです
EnumWindowsで取ったウインドーハンドルから
そのウインドーがどのプロセスのものか調べるにはどうやればできますか?
教えてください
タイトルバーに付いてるシステムボタン(クローズとか)を、
完全に無反応にすることって可能でしょうか?
(ボタンが機能する状態と、無反応の状態を切り替えたい)

押しても閉じない状態まではできるんですが、それでも
ボタンを押したままの状態だと制御がWINMAINに戻ってこなくて・・・
メイン部分を別スレッドにするとかしないとダメ?
GetSystemMenuして、SC_CLOSEを無効化
>>969
disableにするのはダメなの?
>>963
脇道にそれるけど512MB=512*1024*1024だからそれだとちょっと足りない。
>>970 >>971
ボタンをdisableやgrayedにして機能しなくすることはできたんですが、
これだとボタンの上でクリック(ドラッグ)すると、放すまで制御が
WINMAINに戻ってこないんですよね。
ボタン押されてもMAINのコードが止まらないようにしたいんですよ。
WM_NCHITTESTかな?
975948 ◆e.MQo98ta. :04/07/21 17:38
できた……。

>>968
GetWindowThreadProcessId()
>>975
ウインドーハンドルからプログラムのEXEファイルの名前が知りたいのです
それをやるにはどうやりますか?
GetModuleFileNameのような気がしたのでやってみます
違ってたらおしえてください
>976
MSのKBにまんまその回答があったなぁ。
GetModuleFileNameはローカルプロセス専用だった気がする。
>>977
それはモジュールハンドルやインスタンスハンドルを引数に取るんでウィンドウハンドルは無理です。
?
やっぱりGetWindowThreadProcessId()してOpenProcessしてEnumProcessModulesしてGetModuleFileNameExのような気がしてきた
キーボードの左キー(VK_LEFT)を押しながら、
'Z'キーを押した時っていうのはどう表現すればいいですか?
可能なのでしょうか
983デフォルトの名無しさん:04/07/21 21:43
SendMessageとPostMessageってどう違うの?
呼び出し側に制御をすぐに返すのとそうでないのはわかりますけど
それだけの違いではないですよね?
大雑把に言うと、
Sendはその内部で直にウインドウプロシージャを呼び出し、
Postはメッセージをキューに入れるだけで、そのうちGetMessageなどで処理されるのを期待する。
と、俺はこんな感じに捉えているのだが。
>>982
表現はできているじゃないか。

状態を取得したいなら GetKeyboardStatusとかそんなAPIがあった気がする。
>>985
WM_KEYDOWN内でGetAsyncKeyState()関数の組合せで出来ました。
ありがとう。
987デフォルトの名無しさん:04/07/21 22:59
>>984
それって>>983を言い換えただけジャン
>>987
のび太のくせに生意気だぞ
>>986
惜しい、その場合はGetKeyStateだ。
>>987
その違いが理解できないなら使い分ける必要は無い。
非同期と動機の違いで、
同期のSendMessageは戻り値を受け取る事が出来、
非同期のPostMessageは、優先順位に応じて最適なタイミングでの処理が期待できる。
いくつか質問させて下さい。

1.ウィンドウを移動できないようにするにはどうすればいいか?
 WM_MOVING等のイベント拾って無視しても無駄でした。

2.ウィンドウシェードをやりたいのですが、その方法は?
 ウィンドウサイズを0にしたりボーダー+キャプションの高さに
 しても無理でした。

よろしくお願いします。
次スレ立ててきてくれたら教える
993991:04/07/22 00:07
建てますた。よろしくお願いします。

Win32API質問箱 Build21
http://pc5.2ch.net/test/read.cgi/tech/1090422324/
>>991
1.WM_WINDOWPOSCHANGING
2.WM_WINDOWPOSCHANGING/WM_GETMINMAXINFOで妙なことしてなければ普通にサイズ変更するだけ。
埋め
生め
生き
998
今だ!999ゲットォォォォ!!
 ̄ ̄ ̄ ̄ ̄∨ ̄ ̄ ̄       (´´
     ∧∧   )      (´⌒(´
  ⊂(゚Д゚⊂⌒`つ≡≡≡(´⌒;;;≡≡≡
        ̄ ̄  (´⌒(´⌒;;
      ズザーーーーーッ
やたー
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。