トップページ⇒tech
1001コメント312KB

Win32API質問箱 Build17

レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさんNGNG
スレ立てるまでもない、Win32APIについての質問はこちらへどうぞ。
最低限、最新スレくらいは質問する前に検索ぐらいしてください。
過去スレ・参考は>>2-5くらいを参照してください。
0002デフォルトの名無しさんNGNG
2Get!
0003デフォルトの名無しさんNGNG
マ板にもある?
0004デフォルトの名無しさんNGNG
- 過去スレ
Build15:http://pc2.2ch.net/test/read.cgi/tech/1069339866/
Build14:http://pc2.2ch.net/test/read.cgi/tech/1065328397/
Build13:http://pc2.2ch.net/test/read.cgi/tech/1059549320/
Build12:http://pc2.2ch.net/tech/kako/1056/10560/1056033645.html
Build11:http://pc2.2ch.net/tech/kako/1052/10526/1052651750.html
Build10:http://pc2.2ch.net/tech/kako/1047/10478/1047819779.html
Build9:http://pc2.2ch.net/tech/kako/1044/10449/1044929160.html
Build8:http://pc2.2ch.net/tech/kako/1040/10409/1040964626.html
Build7:http://pc3.2ch.net/tech/kako/1036/10366/1036654893.html
Build6:http://pc3.2ch.net/tech/kako/1032/10325/1032548635.html
Build5:http://pc3.2ch.net/tech/kako/1028/10285/1028580373.html
Build4:http://pc3.2ch.net/tech/kako/1023/10233/1023361418.html
Build3:http://pc.2ch.net/tech/kako/1017/10170/1017072275.html
Build2:http://pc.2ch.net/tech/kako/1006/10067/1006783012.html
Build1:http://pc.2ch.net/tech/kako/991/991576947.html


- MSDN Online
http://www.microsoft.com/japan/msdn/default.asp
- 猫でもわかるプログラミング
http://www.kumei.ne.jp/c_lang/index.html
- Platform SDK Update
http://www.microsoft.com/msdownload/platformsdk/sdkupdate/
Google
http://www.google.com
0005デフォルトの名無しさんNGNG
過去すれ17
http://pc2.2ch.net/test/read.cgi/tech/1073830065/
0006デフォルトの名無しさんNGNG
>>5
×過去すれ17
○過去すれ16
0007デフォルトの名無しさんNGNG
+          +  。
 *  、-'ヾ'''ヾ`"''','、、 ,         _____
  _-'"         `;ミ、      /:::::::::::::::::::::::::\〜
 _-"ミ;ノリ人ノノヘ/リ; `゛゛ ミ    /::::::::::::::::::::::::::::::::::::::\〜
 >ミ/         'γ、` ミ   |:::::::::::::;;;;;;|_|_|_|_|〜
 了| "~`、  "~"`   {,',; ;} 。  |;;;;;;;;;;ノ∪  \,) ,,/ ヽ〜
 "7 `⌒`   ⌒   }ミ:. {   |::( 6∪ ー─◎─◎ )〜 
  '|   /       レリ*    |ノ  (∵∴ ( o o)∴)〜  
+  i  (       }ィ'     |∪< ∵∵   3 ∵> ハァハァ
   `  ー---    /|` +     \       ⌒ ノ
    ヽ  ̄    / |__        \_____/
     `i、-- '´   |ソ:     
      ↑               ↑
     JAVAプログラマー     Winプログラマー
0008デフォルトの名無しさんNGNG
>>7
わけわかんないw
0009デフォルトの名無しさんNGNG
>>7
この違いはなんですか?
0010デフォルトの名無しさんNGNG
>>7
JavaもWinもいじるという一番多いパターンの人はどうなるんだよ。
おそらく大部分の人間がそうだぞ。
0011デフォルトの名無しさんNGNG
両方いじる人↓
      ─、、
    (゚皿゚ O) 
    / ̄/ >>
    | ̄|  | |
   @/\ \@/
     /'/ /'/
     | |  | |
    -┛ -┛
0012デフォルトの名無しさんNGNG
>>11
人ですらねぇのかよw
0013デフォルトの名無しさんNGNG
>>11
高見盛?
0014デフォルトの名無しさんNGNG
>>11かなりできそう
0015デフォルトの名無しさんNGNG
こんにちは

あの、リストビューを作ったのですが
行の削除の仕方はわかりますが、列の削除方法がわかりません。
どのAPIを使えばいいのでしょうか?
0016デフォルトの名無しさんNGNG
>>15
ListView_DeleteColumn
0017デフォルトの名無しさんNGNG
。  。。
         。ρ。       ううっ!出るっ!!
         ρ         ̄ ̄ ̄ ̄∨ ̄ ̄ ̄ ̄ ̄
         mドピュッ
        C|.| /⌒⌒⌒ヽ/~ ̄ ̄ ̄ ̄ヽ
      /⌒ヽ⌒ヽ___   |  ∴ヽ  3  )
     ./  _  ゝ___)(9     (` ´) )←>>1-16
    /  丿ヽ___,.───|彡ヽ ―◎-◎-|
    _/ )          (   Y ̄ ̄ ̄ ̄)
   (__/           \____/
0018デフォルトの名無しさんNGNG
>>11
吹いて唾が飛んじまったよ。(w
0019デフォルトの名無しさんNGNG
 ゲーム内で動画(mpeg)を再生させるプログラムを組んでいます。
下記のようなコードで動画を再生させることはできたのですが、
MM_MCINOTIFY受信後にデバイスを閉じる為にMCI_CLOSEを行なうと
NT系で一瞬タスクが切り替わってしまいます。
 ウィンドウモードの場合は問題は無いのですが、フルスクリーン
モード(DXによる排他制御)だとアプリケーションが最小化されて
しまうので困っています。この現象を回避する方法をご存知の方、
いらっしゃいましたら宜しくお願いします。

//ムービーを再生させるまでの処理
mciOpen.lpstrElementName = szFile; //ムービーへのファイルパス
mciSendCommand(0, MCI_OPEN, MCI_OPEN_ELEMENT, (DWORD)&mciOpen);
mciWindow.hWnd = g_hWnd; //デバイス提供先をアプリケーションへ
mciSendCommand(wID, MCI_WINDOW, MCI_DGV_WINDOW_HWND, (DWORD)&mciWindow);
SetRect(&mciPut.rc, 0, 0, 800, 600); //出力矩形を設定(クライアント全体)
mciSendCommand(wID, MCI_PUT, MCI_DGV_RECT | MCI_DGV_PUT_DESTINATION, (DWORD)&mciPut);
mciPlay.dwCallback = (DWORD)g_hWnd; //再生開始
mciSendCommand(wID, MCI_PLAY, MCI_NOTIFY, (DWORD)&mciPlay);

//...
//MM_MCINOTIFYを受け取ったらデバイスを閉じる
mciSendCommand(wID, MCI_STOP, MCI_WAIT, (DWORD)&mciParms);
mciSendCommand(wID, MCI_CLOSE, MCI_WAIT, (DWORD)&mciParms);
0020デフォルトの名無しさんNGNG
DirectShow使うようにしたら?
0021デフォルトの名無しさんNGNG
GetOpenFileName()で hook を使い、かつ、履歴などの左側部分がついた
新しい形式のウィンドウを出すにはどうしたらいいのでしょうか?
ENABLEHOOK すると履歴などの部分がないウィンドウになってしまいます。
0022デフォルトの名無しさんNGNG
こんばんわ

あの質問よろしいでしょうか。

ListView_InsertColumnで、列を5列作成して、
その後、ListView_DeleteColumnで、5列全てを削除した後に、
列をListView_InsertColumnで2列追加したら、何故か、削除したつもりの5列の2列ぐらいが残ってしまいます。

何回繰り返してもそうなります。

ListView_DeleteColumnは、2列分、FALSEを返すので、
何かエラーがあると思われますが、
どの点に問題があるのかわかりません。

列を削除する際、何か特別な事でもするのでしょうか?
0023デフォルトの名無しさんNGNG
>>22
たぶん、ListView_DeleteColumn(index=0,1,2,3,4) の順で削除しているのが原因。
index=3 を削除しようするとき、残りの列はいくつか考えてみよう。
002422NGNG
>>23
そのとおりでした。
私の勘違いです。

index=4,3,2,1,0の順で削除しないと、おかしいですよね。
5列分の一列消せば、全体の数が4になり、順々に減っていきますんね。

勘違いでした。
ご返答ありがとうございます。

馬鹿な質問してスイマセン。m(__)m
0025StarNGNG
http://yi-soft.udap.jp/Window.htm
↑問題のソース
 C・C++とHSPで、サイズ(1024/2,768/2)のウィンドウを表示するという、同じ様なプログラムを作ったのですが、
なぜかC・C++の方が若干ウィンドウサイズが小さく、長い間悩みましたがどうしてもサイズが合いません。
なぜこの様な状態になるのかわかる方がいらっしゃったら、ご教示ください。
0026デフォルトの名無しさんNGNG
HSPやったことないんだが、このscreen命令のサイズはクライアント領域のサイズじゃないか?
それに対して、CreateWindowのサイズはウィンドウのサイズ。
だから、枠の分だけCで組んだ方が小さくなる。

…と、思ったんだがどうだろ?
0027デフォルトの名無しさんNGNG
両方で作ったウィンドウのスクリーンショットどっかにあげてみ?
0028デフォルトの名無しさんNGNG
  | ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄|
  |   次でぼけて!  |
  |________|
      ∧∧.||
    ( ゚д゚)||
    / づΦ
0029StarNGNG
 http://yi-soft.udap.jp/images/Wnd_with_C++.png
 http://yi-soft.udap.jp/images/Wnd_with_HSP.png
↑それぞれのウィンドウ
 http://yi-soft.udap.jp/images/Wnd_Overlapped.png
↑重ねたウィンドウ
0030デフォルトの名無しさんNGNG
>>26が正解。
0031デフォルトの名無しさんNGNG
>>29
AdjustWindowRectEx()を使ってウィンドウサイズを調整しれ。
0032デフォルトの名無しさんNGNG
メニューの段数を正確に知る方法が無いから、Adjust系はダメ。
一度ウインドウを作った後、ウインドウとクライアントのサイズの差を取って
自前で計算するのが正しいやり方
0033デフォルトの名無しさんNGNG
BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD nReason, LPVOID pReserved)
この型って、C#だとそれぞれ、IntPtr、uint, IntPtr
でOK?
0034StarNGNG
>>32
 差を取るにはどうすればいいんですか?
0035デフォルトの名無しさんNGNG
EDITボックスだと32KBまでしか文字列が入らないですけど
それ以上使いたい場合は何を使えばいいのでしょうか?
検索のヒントだけでも教えてください
0036デフォルトの名無しさんNGNG
>32
画面の大きさに対し、メニューの数が十分少ないと分かってるのなら、Adjustで良いんじゃないの?
そもそも、その微妙な調整でだって、メニューの段数が変わる可能性もあり得ないわけではない。
0037デフォルトの名無しさんNGNG
>>35
NT系使え
サイズ制限なし
0038デフォルトの名無しさんNGNG
>>36
幅を決めてから高さを決めるような二段式にすれば
システムのプロパティいじったり、動的にメニューを変えない限り
問題なく決定できるけど。
0039デフォルトの名無しさんNGNG
>38
なるほど納得。
0040デフォルトの名無しさんNGNG
>>37
9xの場合はどうすればいいんですか?
0041デフォルトの名無しさんNGNG
>>21
おそらくヘッダが古い。
新しいサイズの OPENFILENAME 構造体が必要。
004240NGNG
Meでやったら40KBの容量がEDITボックスに収められ、問題解決しました
おじゃましました
0043デフォルトの名無しさんNGNG
>>40
多少重くてもいいならリッチエディット、それがいやなら自作するなりどっかから
ライブラリ・コンポーネントを拾ってくるなり。
0044デフォルトの名無しさんNGNG
>>41
あるいはヘッダが最新でも#define _WIN32_WINNT 0x500
してないとか
0045デフォルトの名無しさんNGNG
J3002VとUSBで通信してアドレス帳などを
ゲットしたいのですが
どこから取り掛かればよいでしょうか?
Cと普通のAPIなら使えます。
0046デフォルトの名無しさんNGNG
>>45
ttp://www.cqpub.co.jp/hanbai/books/33/33191.htm
0047デフォルトの名無しさんNGNG
>>46
thx
難しそうなのでやめました。
0048デフォルトの名無しさんNGNG
>>45
ttp://www.jrcphs.jp/j300v/download.html
これのドライバのI/Fわかればなんとかなる
0049高校生NGNG
>>40
要するに、メニューとか何とかがからんで、画面の描画する領域が狭くなってしまうということかな?
とすると……。
//Winはウインドウサイズ、Cliはクライアントエリア
  RECT Win Cli;
//それぞれ取得する。
  GetWindowRect(hwnd, &Win);
  GetClientRect(hwnd, &Cli);
//ウインドウのサイズを計算して、
  Win.right -= Win.Left;
  Win.bottom -= Win.top;
//ウインドウのリサイズ
  SetWindowPos(hwnd, hwnd, 0, 0,
    (Win.right - Cli.right) + 640,
    (Win.bottom - Cli.bottom) + 480,
    SWP_NOMOVE | SWP_NOZORDER);

学校からだからタイプミスしているかもしれないけど。
0050デフォルトの名無しさんNGNG
>>36>>38見てなかったのか
005121NGNG
>>41 >>44
米国インテルのWebサイトに情報があり
まさにそのようですね
SDKをupdateしてみました。
標準のヘッダとライブラリを無視する設定にしたので
新しいヘッダを読んでいる筈なのですが
状況は変わりません。
sizeof(OPENFILENAME)を表示させるとあいかわらず76のままです
あたらしいものは88なんですよね?
0052デフォルトの名無しさんNGNG
>>49
ついでだから SetWindowPos の最後の引数に
SWP_NOACTIVATE もつけてあげて。
非アクティブなウィンドウでそれをやられて
悩んだ事があった。
0053StarNGNG
 クライアントサイズの操作、うまくできる様になりました。
教えてくださった方々、ありがとうございました。
0054デフォルトの名無しさんNGNG
>51
漏れだけかもしれないが、無印.NETだとどうやっても新しい方での
表示はできなかった
.NET 2003だと無問題でアッサリできたYO!
0055デフォルトの名無しさんNGNG
いまプリンタに印刷するプログラムを書いるんですが、印刷される文字が小さすぎます。
ユーザにダイアログからフォントを指定してもらって、
印刷ダイアログの返す DC にフォントや MM_TEXT 等を設定して
TextOut で1文字ずつ描画してるんですが、予想される文字サイズと違います。
 1 pt = 1/72 インチ
 1インチ = 2.54 cm
なはずなので、
 16 pt = 5.64 mm
 72 pt = 25.4 mm
ぐらいに印刷されると思うんですが
どう考えても文字サイズが小さすぎます。

どこで計算を間違えているのか分かりません。
予想されるミス、ありがちなミスは何でしょうか。
どなたかよろしくお願いします。
0056デフォルトの名無しさんNGNG
>>51
開発環境上のinclude/libディレクトリの指定は、ちゃんと新しい方が上位になってるよな?
0057デフォルトの名無しさんNGNG
ちょっと疑問に思ったんだけど
フック対象アプリのエディットコントロールに対してEM_GETSELTEXTを送るフックアプリがあるとします。
フックアプリはUNICODEビルド、フック対象アプリはマルチバイトビルドされているとします。

この場合、EM_GETSELTEXTで得られる文字列はUNICODE or マルチバイト どちらなのでしょうか?
0058デフォルトの名無しさんNGNG
>>55
16pt=16/72インチの長さを得るためには、
解像度96dpiなら 16 / 72 * 96 = 約21ドット必要。
解像度300dpiなら 16 / 72 * 300 = 約67ドット必要。
同じ16pt(16/72インチ)でも、解像度によって必要なドット数は変わってくる。
例えば、解像度96dpi用にラスタライズされた16ptのフォントを、300dpiのプ
リンタで印刷すると、本来必要な67ドットに対して21ドットしかないので、約
5ptの大きさで印刷されてしまう。

というわけで、
>予想されるミス、ありがちなミス
は、解像度関係と予想してみますた。
これ以外が原因なら私には分かりませんな。
0059デフォルトの名無しさんNGNG
>>57
ちょっと考えてみるか、実際に試してみるとすぐに解るが、
フック対象はEditコントロールではないのか?
0060デフォルトの名無しさんNGNG
console アプリでコンソールの上をマウスでクリックすると出力が止まって
しまうのですが、これを回避させる方法ってありませんか?

ctrl-Q で復活はするのですが。
0061デフォルトの名無しさんNGNG
Windows 2000以降で
ユーザーがログオンした、ログオフした、ということを
通知してくれるようなAPIってないですか?
0062デフォルトの名無しさんNGNG
垂直スクロールバーをCreateWindowして、このウィンドウを
サブクラス化してオリジナルのスクロールバーを作っています。
WM_PAINTを横取りして、それらしい絵を描画しました。
左マウスアップ時に標準のスクロールバーがしゃしゃり出てきてしまうので
再描画をかけようとするのですが、WM_LBUTTONUPをフックできません。
Spy++で確認するとWM_LBUTTONUPは発行されているようです。
WM?RBUTTONUPなどは正常にフックできるのですが、なぜでしょうか?
0063デフォルトの名無しさんNGNG
>>60
簡易編集モードになってない?
0064デフォルトの名無しさんNGNG
>>61
サービス作れば?
0065デフォルトの名無しさんNGNG
>>64
サービスだとどんなAPIで実現できるんですか?
0066デフォルトの名無しさんNGNG
>>61
WinXP の WTSRegisterSessionNotification() みたいなものが欲しいってことか?
0067デフォルトの名無しさんNGNG
読み→漢字の日本語変換のプログラムを書いています。
"あい"と入力して、"愛", "合い", "会い"とリストを取得するコードです。

ImmGetConversionListのGCL_CONVERSIONを使用しています。
取得できるリスト(候補)が、エディターなどでIMEを普通に使う時に比べて明らかに少ないのですが、
何か原因は考えられますでしょうか?
Win2000で開発しています。
0068デフォルトの名無しさんNGNG
>>62
スクロールバークラスを使用するより、自分でスクロールバーを作ってしまった
方が良いのでは・・・。
0069デフォルトの名無しさんNGNG
>>62
MSDNの、メッセージに対するデフォルトの処理の項目を見た?
WM_PAINTじゃないところで描画してない?
007040NGNG
>>49
レスアンカー間違えてますか?
007160NGNG
>>63
そんなモードがあるんだ。 知らんかった。。。 _| ̄|○
0072デフォルトの名無しさんNGNG
>>66
はい、似たようなAPIがないものかと。
0073デフォルトの名無しさんNGNG
WM_USERCHANGEDはこないのかな
0074デフォルトの名無しさんNGNG
FtpCommandで全階層のフォルダ名のみを抽出するコマンドを教えてください
0075デフォルトの名無しさんNGNG
>>74
前スレでそんな話題があったような気がする
0076デフォルトの名無しさんNGNG
>>73
Windows 2000だと来ないみたいです。
0077デフォルトの名無しさんNGNG
>>76
win2kではサービス作るしかないね。
0078デフォルトの名無しさんNGNG
>>77
サービスではどう実装するんですか?
0079デフォルトの名無しさんNGNG
\Device\Harddisk2\DR5
ってどうやって解釈したら言いのでしょうか?
DR5の意味が理解できません
0080デフォルトの名無しさんNGNG
CUI用のライブラリを使っていてその中で
printfなどで標準出力への出力を行なっていて
その出力内容を見たいのですが可能でしょうか?
子プロセスの標準出力をパイプで持ってくる場合の
サンプルは見つかったのですが自分自身の場合が
見つかりませんでした。
よろしくお願いします。
0081デフォルトの名無しさんNGNG
>>80
スレも違うし内容も意味不明
0082デフォルトの名無しさんNGNG
>80
SetStdHandle()?
0083デフォルトの名無しさんNGNG
OpenFileMapping の引数 BOOL bInheritHandle って、
TRUE なら新しいプロセスにハンドルを継承させるかを指定します となってるんですが、
ハンドルの継承とはどういうものなのでしょうか?
0084デフォルトの名無しさんNGNG
親プロセスで使っていたハンドルの値が
そのまま子プロセスでも使えるというものです。
0085デフォルトの名無しさんNGNG
62です。
もともとの根源はWM_PAINT以外で描画が行われているということなので、
こちらの方向で解決策を見つけます。
WM_PAINT以外でどのメッセージを捕捉すればシステムに描画させなくて済みますか?
0086デフォルトの名無しさんNGNG
>>84
なるほど。
ありがとうございました。
008780NGNG
>>82
HANDLE hOldStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
HANDLE hStdIn, hStdOut;
SECURITY_ATTRIBUTES sa;
sa.nLength = sizeof(sa);
sa.lpSecurityDescriptor = NULL;
sa.bInheritHandle = TRUE;
CreatePipe(&hStdIn, &hStdOut, &sa, 0);
SetStdHandle(STD_OUTPUT_HANDLE, hStdOut);
// 標準出力への出力
SetStdHandle(STD_OUTPUT_HANDLE, hOldStdOut);
CloseHandle(hStdOut);
// パイプから読み出し
CloseHandle(hStdIn);

とりあえずこんな感じでやってみたのですがパイプから読み出せませんでした。
設定後printfではなくWriteFileでGetStdHandle(STD_OUTPUT_HANDLE)の
ハンドルに出力するとパイプから読み出すことが出来るので設定は出来ているようなのですが…
パイプじゃ駄目なのでしょうか?
0088デフォルトの名無しさんNGNG
printfって、stdoutに出力するから、無理なのでは?



わざわざstdoutを変更すれば、あるいは
0089デフォルトの名無しさんNGNG
オマイ、取り合え酢、何をしようとしているのかわからん。
只の、共有メモリなら、OSの特権持てばなんでもありだろう。バーか。
009080NGNG
>>88
でもこの方法で子プロセスのprintfの出力は見ることはできます。
GUIアプリの場合標準出力は設定しても使えなかったりするのでしょうか?
009188NGNG
あれ、GUIにしたらstdoutはどうなるんだ?

GUI.exe > out.txt

リダイレクトしたら一応見れるけど、しなかった場合は?
0092デフォルトの名無しさんNGNG
>>89
理解できないなら無理してレスするな。
なんで共有メモリの話になるんだ。
オマイもかなりバカっぽいぞ。
0093デフォルトの名無しさんNGNG
ツーカ、どこもでも、PDP11のスキップしかない腐れミニコンの
話だろう。シネヤ。見に糞なんぞWindowsのほうがまだましだよ。
0094デフォルトの名無しさんNGNG
>>93
オマイはカルシウム不足。もっと牛乳飲め。
0095デフォルトの名無しさんNGNG
>>94
オマイはタンパク質不足。もっとセエーキ飲め。

0096デフォルトの名無しさんNGNG
>>95
オマイはワンパク質不足。もっとジャイアン飲め。
0097デフォルトの名無しさんNGNG
はっ!一瞬あほを語るスレかと思った
0098デフォルトの名無しさんNGNG
牛乳を飲むとカルシウムが溶け出すことを知らないのか?
0099デフォルトの名無しさんNGNG
>>98
じゃあ俺たちは何を飲めばいいのか?
0100デフォルトの名無しさんNGNG
>>99
カルシウム飲めば?
0101デフォルトの名無しさんNGNG
カルシウムを飲むとカルシウムが溶け出すことを知らないのか?
0102デフォルトの名無しさんNGNG
>>99
ニポン人はラクターゼ活性持続症では無いのでカルシウムをせこせこ取る必要はないのだそうです。
0103デフォルトの名無しさんNGNG
Win32GetCalcium(LPCTSTR lpHumanName);
0104デフォルトの名無しさんNGNG
>>101
息を止めて飲めば大丈夫らしいよ。
0105デフォルトの名無しさんNGNG
ママはオロナミンを混ぜて、オロナミンセーキ
0106デフォルトの名無しさんNGNG
ママがオロナミンに生卵混ぜてるCMをエロいと思い始めたのはいつ頃だったろう・・・
0107デフォルトの名無しさんNGNG
PerlのCryptと同じ様な機能のAPIありますか?
0108デフォルトの名無しさんNGNG
>>107
無い。そしてPerlのCryptはAPIではない。
0109デフォルトの名無しさんNGNG
誰もPerlのCryptがAPIだなんて言って無いだろ。氏ね。
0110デフォルトの名無しさんNGNG
>>98
ぐぐってみたらマジじゃねーか
0111デフォルトの名無しさんNGNG
>>103
ワロタ
0112デフォルトの名無しさんNGNG
ufc
0113デフォルトの名無しさんNGNG
>87
SetStdHandle()じゃ駄目っぽい?
ならfreopen()でファイルに出力してそれを読むとか。
0114デフォルトの名無しさんNGNG
>>113
freopenだと大丈夫でした。
ありがとうございました。
0115デフォルトの名無しさんNGNG
VC++でSDKプログラムをやってる者ですが、質問があります。
bmpファイルを開くためのコモンダイアログを作っているのですが、
よく、コモンダイアログの右の部分に選択している画像を表示できる
機能のついているものを見かけますが、あれはSDKでは、どのように
すればよいのでしょうか?
0116デフォルトの名無しさんNGNG
服
0117デフォルトの名無しさんNGNG
カルシウム不足・・・
ム板って科学的な知見がそこいらへんのオバサン並みなやつばっかりだな (プ
0118115NGNG
>116
フック関数とやらを使うようですね。ども。
0119デフォルトの名無しさんNGNG
>>117 今は、若者のバカっぷりは、頭が再構築されてる為だって事を言いたいのかい?
0120デフォルトの名無しさんNGNG
>>117
だからそんなに怒りっぽいとならカルシウム取れって。
それかスルーを覚えろ。
0121デフォルトの名無しさんNGNG
>>119
漏れはとにかく2chで他人にからみまくって仕事のウサ晴らししてる
って事を言いたいのだと思う。
0122デフォルトの名無しさんNGNG
カルシウム不足でいらいらする、と言うのは迷信です。
0123デフォルトの名無しさんNGNG
>>122
じゃ、いらいらするときにカルシウムを取ると
落ち着くというのは本当?
0124デフォルトの名無しさんNGNG
>>123
イライラしている瞬間に効くのは”糖” だから、カルシウムなんとかに入ってる糖が効いてるのだろう。

でもカルシウム不足は長期には脳をそういう方向に導くそうだよ。
0125デフォルトの名無しさんNGNG
カルシウムがないと血が止まらないぞ
0126115NGNG
フック関数を猫等で調べてやってみたのですが、ファイルを開く
コモンダイアログでやってみると、なんかすごく劣化したみたいな
ダイアログが開いてしまうのはなぜですか?
0127デフォルトの名無しさんNGNG
>>126
コモンダイアログだからです。
0128デフォルトの名無しさんNGNG
必死だなてめーら (プゲラ
0129デフォルトの名無しさんNGNG
で、効率よくカルシウムを摂取したいのですが、方法がわかりません。
どうすればよいでしょうか?
0130デフォルトの名無しさんNGNG
すいません質問です。
モードレスダイアログを使っていてタブオーダーが効かないので
調べてみたらどうやらIsDialogMessage関数なるものをTranslateMessage関数の前に入れることで解決するようです。
ここでどうやらすべてのモードレスダイアログに対してIsDialogMessage関数を呼ばなくてはならないみたいです。
なのでモードレスダイアログを生成するたびにハンドルを集めてこなければならないので
あまりエレガントでは無いような気がするのですが何かいい解決方法はないのでしょうか?
0131デフォルトの名無しさんNGNG
>>130
キー入力を受け取るウィンドウは一つなんだから、
今アクティブなダイアログに対してだけ呼び出せばいいよ。
WM_ACTIVATEあたりでグローバル変数に突っ込んどけ。
0132デフォルトの名無しさんNGNG
現在のMSDNオンラインはAPIリファレンスを見つけづらいな
ShellExecuteの日本語説明はどこにあるんだ?
lpVerbをNULLにしたときの説明が見たいんだが
0133実験NGNG
http://www.microsoft.com/japan/msdn/library/ja/jpshell/html/_win32_shellexecute.asp
0134デフォルトの名無しさんNGNG
>>131
レスありがとうございます。

グローバル変数ですか。
うーんやっぱりこの処理にはグローバル(もしくはそれに近いもの)使うのが
一番綺麗にいく気がしますねぇ。

Win32APIってこんなんばっかりですねw

ありがとうございました。
0135デフォルトの名無しさんNGNG
>>132
ttp://www.vector.co.jp/soft/win95/prog/se275624.html
これのomakeの中に入ってるHELPを俺は使ってる。
本体はHSPユーザ以外には役にたたないが、HELPは132みたいなやつには役に立つんじゃないかと思う。
0136デフォルトの名無しさんNGNG
>>133
>>135
Thanks!
0137デフォルトの名無しさんNGNG
VCでタスクスケジュールにプログラムを登録するやり方を教えてください。
0138デフォルトの名無しさんNGNG
>>134
モードレスがわかってない
0139デフォルトの名無しさんNGNG
ttp://www.microsoft.com/japan/msdn/library/ja/jpwinui/html/_win32_extracticon.asp
ttp://www.microsoft.com/japan/msdn/library/ja/jpwinui/html/_win32_extractassociatedicon.asp

ExtractIconは「DestroyIcon関数を呼び出して破棄しなければなりません。」
と書かれているのに、ExtractAssociatedIconには破棄について書かれていません。
ExtractAssociatedIconで取得したアイコンは破棄しなくてもいいのですか?
0140デフォルトの名無しさんNGNG
MSDN を見ると、
WM_COPYDATA でデータを送る際、
SendMessage の 3 番目の引数にデータの送信元のウィンドウハンドルを指定する、
と書かれています。

送るべきウィンドウハンドルがない場合
(例えばコマンドラインからデータを送るようなツール) はどうすればよいのでしょうか?
試しに適当な値を設定して SendMessage を読んでも
ちゃんとデータを送れているのですが、それでいいのかどうか不安で。
0141デフォルトの名無しさんNGNG
>>140
問題なしと思われ
0142デフォルトの名無しさんNGNG
あるディレクトリィ下に存在するファイルのファイル名を取得したいのですが
実現方法が分かりません。ヒントでも良いのでがお願いします。
0143デフォルトの名無しさんNGNG
>>142
MFCなら CFileFind、
APIだと、FindFirstFile/FindNextFile かな。

FindFirstFileの後で1回FindNextFileをやらないと、
1つ目のファイルを取得できないので注意。
0144デフォルトの名無しさんNGNG
>>142
_findfirstおよびその他の関連関数を見てください。
0145デフォルトの名無しさんNGNG
>>142
そういや、VC6.0の場合だけど、CFileFind の
GetFilePathには2バイト文字未対応のバグがあって、
例えば c:\言語機能\hoge というパスだと誤動作を
起こします。機能の「能」がMBCS Lead Byte + '\'
になってるから。

漏れは CFileFindExを派生させて
GetFilePathをオーバーライドして使ってます。
0146デフォルトの名無しさんNGNG
>>143
>>144
ありがとう^^
0147デフォルトの名無しさんNGNG
>>145
なるほど、サンクスです^^
0148大阪ジャイアンNGNG
>>137
ITaskScheduler
0149デフォルトの名無しさんNGNG
PCに繋いであるウェブカメラの動画を単に見るだけのアプリを作りたいのですが、
あれは何か規格があるのでしょうか?SDKレベルでは無理ですか?
0150デフォルトの名無しさんNGNG
DirectShow違う?
0151大阪ジャイアンNGNG
HTTPだろ
0152デフォルトの名無しさんNGNG
>>149
オマイ、覗きか?w
逮捕するぞw
0153149NGNG
いえ、ネットワークとかには繋がなくていいんです。

ダイアログエディタに何かのコントロール貼るだけ、
みたいなわけにはいかないんですかね?
0154デフォルトの名無しさんNGNG
>>153
2つ以上の考え方がある。
JPEG/MPEGとかの伝送に従ったものと、
ただ、ファイルシステムに従った伝送と、
リアルタイムを考慮したした、画像伝送とか。
それを決めてくれないと教えられない。
0155デフォルトの名無しさんNGNG
>>153
そんなので済ませたいならスレ違い。
0156デフォルトの名無しさんNGNG
の解説をお願いします

#include <windows.h>
#include <stdio.h>
void main(int argc,char *argv[]){
long (_stdcall *a)(DEVMODE *,unsigned long);
a=ChangeDisplaySettings;
a=(long (_stdcall *)(DEVMODE *,unsigned long))0x77d382a4;
DEVMODE mode;
memset(&mode,0,sizeof(DEVMODE));
mode.dmSize=sizeof(DEVMODE);
mode.dmBitsPerPel=16;
mode.dmPelsWidth=800;
mode.dmPelsHeight=600;
mode.dmFields=1835008;
a(&mode,0);
}
0157149NGNG
>>154
そんな大袈裟なものじゃないんです。カメラをつなぐと、
NetMeeting やら、Media Encoder やらで画面を出せますよね?
ああいう何か共通のコントロールみたいなのがあるのかなと
思ったんです。

>>155
もしコモンコントロールにあるのなら…と思ったのですが
そういうわけではないのですかね?どちらにしてもスレ違いでしょうか?
0158デフォルトの名無しさんNGNG
>>156
"C言語"というプログラミング言語で書かれた、
プログラムソースコードです。
0159デフォルトの名無しさんNGNG
リストビューでNM_KILLFOCUSが呼ばれたときに
フォーカスがはずれた要素を取得するにはどうしたらよいのでしょうか?
0160デフォルトの名無しさんNGNG
>>156
モニタの解像度を変えてるようだが…
しかしChangeDisplaySettingsを aにセットした後
0x77d382a4の即値をセットするのはなんでだ?
そんなんで動くのか?
0161デフォルトの名無しさんNGNG
>>160
動かしてみた。やっぱ、こうなるよなぁ〜。

console_foo.exe の 0x77d382a4 でハンドルされていない例外が発生しました : 0xC0000005: 場所 0x77d382a4 を読み込み中にアクセス違反が発生しました。 。
0162159NGNG
すいませんボケてました気にしないでください。
0163デフォルトの名無しさんNGNG
Q.「Win32APIのGetOpenFileNameを使用しファイル名欄に
前回選択時の複数ファイル名を表示させたい」

Win32APIのGetOpenFileNameでOPENFILENAME構造体のFlagsに
OFN_ALLOWMULTISELECT Or OFN_EXPLORERを指定し
ファイルの複数指定用のダイアログを表示します。
この際に前回このダイアログで指定した複数のファイル名を
ファイル名欄に表示させたく存じます。
例)"hoge_03.zip" "hoge_01.zip" "hoge_00.zip"

この場合にOPENFILENAME構造体のlpstrFileに
前回のファイルパス内容を保持した文字変数を代入させてから
このAPIをCallすればよいと思い
ドライブ名+ディレクトリ名|ファイル名|ファイル名|・・・||(|はNull)
をlpstrFileにセットしましたがダイアログ表示時に""で括った
複数ファイル表示の文字列として表示されません。

lpstrFileにはどのように文字列をセットすれば
ファイル名欄に""で括った複数ファイルを指定した文字列として
表示されるのでしょうか?

この際のOPENFILENAME構造体のパラメータの条件等について
ご存知の方、ご教授下さい。<(..)>
0164デフォルトの名無しさんNGNG
OFN_ALLOWMULTISELECT は入れてるか
0165デフォルトの名無しさんNGNG
ああごめん入れてるって書いてるな
0166デフォルトの名無しさんNGNG
nMaxFileはちゃんと設定してる?
0167デフォルトの名無しさんNGNG
>>163
>前回選択時の複数ファイル名を表示させたい

GetOpenFileNameでそんな器用なことができるのかな
lpstrFileは単なる出力バッファと思ってたけど
0168デフォルトの名無しさんNGNG
>>167
> GetOpenFileNameでそんな器用なことができるのかな
> lpstrFileは単なる出力バッファと思ってたけど
できるよ。
0169デフォルトの名無しさんNGNG
16へぇ。
0170デフォルトの名無しさんNGNG
ウィンドウをつくって画像を表示した上に文字をかくと文字の周りが白くなって画像が
きれいに写らないんですがそれを直す方法がわかりません。
知ってるかたいたら教えてください。よろしくお願いします。
0171デフォルトの名無しさんNGNG
>>170
SetBkMode
0172170NGNG
>>171
早速ググッったらそれらしいものがでてきました。
即レスありがとうございます。
0173デフォルトの名無しさんNGNG
こんばんわ

ListControlに関して、質問をしたいのですが。

アプリケーション定義比較関数内で、
下記の「lp1」と「lp2」に、必ず同じ値しか入らない(一番初めの項目しか参照されない)ため、
比較処理されません。
これは何に問題があるのでしょうか。

int CALLBACK MyCompProc(LPARAM lp1, LPARAM lp2, LPARAM lp3)
{
static LV_FINDINFO lvf;
static int nItem1, nItem2;
static char buf1[30], buf2[30];

lvf.flags = LVFI_PARAM;
lvf.lParam = lp1;
nItem1 = ListView_FindItem(hMWC_LIS, -1, &lvf);

lvf.lParam = lp2;
nItem2 = ListView_FindItem(hMWC_LIS, -1, &lvf);

ListView_GetItemText(hMWC_LIS, nItem1, (int)lp3, buf1, sizeof(buf1));
ListView_GetItemText(hMWC_LIS, nItem2, (int)lp3, buf2, sizeof(buf2));
if (sortsubno[(int)lp3] == 1)
return(strcmp(buf1, buf2));
else
return(strcmp(buf1, buf2) * -1);
}
0174デフォルトの名無しさんNGNG
163の者です。

>>166
(256以上の値を指定しろと書いてあったんで複数選択を考慮して)
nMaxFile=512
nMaxFileTitle=512
で設定しています。

>>168
1つのファイル名のみならlpstrFileにセットすれば
ファイル名欄にちゃんと表示されるんです。
(OFN_ALLOWMULTISELECT指定してもしなくても)

複数のファイル名をlpstrFileに指定して表示している
サンプルコードをネットで探してみたんですが、
一応にみなNullの初期化のみをして居るものしかなくて。。。
何方かこの様なことをして出来た方居られましたら
レス下さい。。。宜しくお願い致します。
0175デフォルトの名無しさんNGNG
>>173
Item毎に固有のlParamを設定していないからだと思われ。
0176173NGNG
>>175
そのとおりでした。

ありがとうございました。
0177デフォルトの名無しさんNGNG
>174
めんどくさいから試してないけど、もしかしたらファイル部分を
"file1" "file2" "file3"
形式で渡すとか?
0178デフォルトの名無しさんNGNG
>>174
OFN_ALLOWMULTISELECT を指定して、出力形式と同じ形式で入力を
指定しても、先頭のディレクトリ部分しか参照されないのだから、
標準ではそのようなことはできないと考えるのが普通だろう。
OFN_ENABLEHOOK して WM_INITDIALOG あたりで設定すればいいのでは?
0179デフォルトの名無しさんNGNG
>>177
FNERR_INVALIDFILENAME
0180デフォルトの名無しさんNGNG
GetObject関数でビットマップの幅・高さを取得したいんですが、
下の関数では値が不定になってしまいます。どこが悪いのかご教示くだされば幸いです。
// あらかじめint型グローバル変数wとhを宣言しておく
void BitMapBld(HWND hWnd, const char flname[], int px, int py){

HDC hDC, hDCBmp;
HBITMAP hBitmap;
BITMAP bmp;

hDC = GetDC(hWnd);
hDCBmp = CreateCompatibleDC(hDC);

GetObject(hDCBmp,sizeof(BITMAP),&bmp);
hBitmap = (HBITMAP)LoadImage(NULL, flname, IMAGE_BITMAP,
bmp.bmWidth, bmp.bmHeight, LR_LOADFROMFILE | LR_CREATEDIBSECTION);

SelectObject(hDCBmp, hBitmap);

BitBlt(hDC, px, py, bmp.bmWidth, bmp.bmHeight, hDCBmp, 0, 0, SRCCOPY);

DeleteDC(hDCBmp);
DeleteObject(hBitmap);
ReleaseDC(hWnd, hDC);

w = bmp.bmWidth; h = bmp.bmHeight;
// WM_LBUTTONUPメッセージが来た時にwsprintf関数とMessageBox関数で
// 結果を表示するために、グローバル変数にコピーしておいている

return;

}
0181デフォルトの名無しさんNGNG
>>180
コンパチブルビットマップ作成後は1x1のモノクロビットマップだよ。
こうすれば動くんじゃないかなー。

// サイズはビットマップから自動取得
hBitmap = (HBITMAP)LoadImage(NULL, flname, IMAGE_BITMAP,
0, 0, LR_LOADFROMFILE | LR_CREATEDIBSECTION);

HBITMAP hOldBitmap = (HBITMAP)SelectObject(hDCBmp, hBitmap);
GetObject(hDCBmp,sizeof(BITMAP),&bmp);

BitBlt(hDC, px, py, bmp.bmWidth, bmp.bmHeight, hDCBmp, 0, 0, SRCCOPY);

SelectObject( hDCBmp, hOldBitmap );
DeleteDC(hDCBmp);
DeleteObject(hBitmap);
ReleaseDC(hWnd, hDC);
0182デフォルトの名無しさんNGNG
間違った(;´Д`)
GetObject(hDCBmp,sizeof(BITMAP),&bmp);
は
GetObject(hBitmap,sizeof(BITMAP),&bmp);
で。
0183デフォルトの名無しさんNGNG
間違った(;´Д`)
GetObject(hDCBmp,sizeof(BITMAP),&bmp);
は
GetObject(hBitmap,sizeof(BITMAP),&bmp);
で。
0184デフォルトの名無しさんNGNG
2重カキコになってしまった…_| ̄|○
0185180NGNG
>>181-184
 うおお、うまくいきました。感謝します。
0186107NGNG
とりあえず報告します
Cryptと同じ様なAPIはなかったようなので
ぎこはにゃ〜ん作者様が提供しているソースから同機能を実現しました
0187デフォルトの名無しさんNGNG
>>132
恐れ巣だが、
MASAPICO'S Page の「関数別Win32サンプル集」が結構便利でよく使う
0188ageNGNG
  ム___      _____、__,ィ
  |    ̄`ミl==r'´     /  Win32API -xp Reloaded-
   `ヽ、_____j ヽ、____,-'
0189デフォルトの名無しさんNGNG
正直、今時Win32APIつぅのもな。
0190デフォルトの名無しさんNGNG
>>189
 そうか?そんなこともないと思うが。
0191デフォルトの名無しさんNGNG
>>189
今時なのはなんなのよ?
0192デフォルトの名無しさんNGNG
WinFX<早杉
0193デフォルトの名無しさんNGNG
WinG
0194デフォルトの名無しさんNGNG
>>191
Del坊だろほっといてやれ。
0195デフォルトの名無しさんNGNG
こんばんわ。
ご教授いただきたいことがあって、書き込みさせていただきました。

現在使用中のドライブ一覧を表示する関数を作成しているのですが、
USBに接続されているUSBメモリ、は「リムーバブルディスク」
USBに接続されているFDD、は「3.5インチFD」
と区別したいのですが、GetDriveTypeだとどちらも戻り値が「2」となり
区別ができません。

解決法をご存知の方がいらっしゃいましたらレスいただけますでしょうか?
よろしくお願いします。

0196デフォルトの名無しさんNGNG
>>188
ジュワッ
0197デフォルトの名無しさんNGNG
ATAPIコマンドでも送ってみたら?
0198デフォルトの名無しさんNGNG
面倒だから容量が4MB未満ならFD扱いしとけ。
0199デフォルトの名無しさんNGNG
起動しているOSが何語版か判断する方法ありますか?
0200デフォルトの名無しさんNGNG
>>199
だからさー、バージョンくらい教えろよ。
皆、忙しいんだからさー。お前の会社は馬鹿しかいないのかよw
0201デフォルトの名無しさんNGNG
>>198
それも考えたのですが、RとRWとかもあるので、いっそのこと
ディスクのプロパティのなかの「種類」の文字列が取れないかと思ったのです。

「ローカル ディスク」とか「ネットワークドライブ」「リムーバブルディスク」
のような感じですね。
0202デフォルトの名無しさんNGNG
>>210
SHGetFileInfoでどうかな。
0203デフォルトの名無しさんNGNG
>>202
予言レスですか
0204デフォルトの名無しさんNGNG
そうです。FF->
0205デフォルトの名無しさんNGNG
hdc = BeginPaint(hWnd,&ps);
hBrush = CreateSolidBrush(RGB(255,0,0));
hOldBrush = (HBRUSH)SelectObject(hdc,hBrush);

DeleteObject(hBrush);
SelectObject(hdc,hOldBrush);
EndPaint(hWnd,&ps);

↑
参考書のソースなんですが、
この様に、使用中のブラシ(hBrush)を破棄しても問題ないのですか?
気分的にSelectObject(hdc,hOldBrush)の後が良い気がするんですが・・・

0206デフォルトの名無しさんNGNG
>>205
msdnに駄目って書いてある。
0207205NGNG
>>206
やっぱりですか・・・
いたく納得しました。
0208201NGNG
>>202
そのセンでいけそうですのでやってみます。
ありがとうございます。

結果は明日報告いたします。
0209大阪ジャイアンNGNG
hage
0210デフォルトの名無しさんNGNG
ファイルに関連付けられたアイコンを取得するにはどうしたらいいんですか?

>>202
ありがとうございました。
0211大阪ジャイアンNGNG
システムイメージリストを取得したいのですが、どうすればいいですか?
0212大阪ジャイアンNGNG
先を越された (;´Д`)
0213デフォルトの名無しさんNGNG
>>199
GetSystemDefaultLangIDあたりじゃダメ?
MultiLanguage環境の場合ユーザーごとに言語が違う可能性有るから、
現在のインターフェイス言語が知りたいならGetUserDefaultLangIDの方になるけど。
0214デフォルトの名無しさんNGNG
特定のメニューウィンドウ(クラス名が"#32768"のウィンドウ)のハンドル(HWND)から、
そのメニューウィンドウに描画されるメニューのハンドル(HMENU)を調べる方法はありますか?
0215デフォルトの名無しさんNGNG
GetMenu()ってそのまんまな関数があるんだが…
MSDN検索してる?
0216201NGNG
無事できました。
あとでぐぐったら結構サンプルあってショボーン。(AA略。
でもSH系は盲点でした。

0217デフォルトの名無しさんNGNG
エクスプローラと同じことがしたかったらまずSH系を調べるべし
0218デフォルトの名無しさんNGNG
他のウィンドウが出すMessageBoxに表示される文字列を入手、
そしてそのMessageBoxは破棄(表示させない)ようにしたいと思っています。

現状は、そのウィンドウをフックしてMessageBoxのハンドルを手に入れてしまえば
とりあえず何とかなるだろうと思い、試行錯誤しています。

WM_CTLCOLORMSGBOXは、Windows32ビット版では使われていないようで、
簡単なサンプルプログラムをWin2k SP4にて作ってみましたが、実際送られてこないようです。
そのWin32版を探してみても見つかりません。

Win2000でメッセージボックスを出す前に出るメッセージ、
もしくは全く他の方向でも構わないのですが、何か方法がないものでしょうか?
0219デフォルトの名無しさんNGNG
>>218
MessageBox APIをフックする。
APIフックとか良く知らんが。
0220218NGNG
>>219
ご回答感謝いたします。調べてみました。
なにやらidata 領域にあるAPI の実アドレスを
フック関数のアドレスに書き換えてしまうなど、なかなか興味深い事が書いてありました。

この方向でいろいろやってみます。
ありがとうございました。
0221デフォルトの名無しさんNGNG
標準のメニューを拡張して複数選択をさせることはできますか?
0222デフォルトの名無しさんNGNG
チェックはつけることができる
0223デフォルトの名無しさんNGNG
どういうUIでメニューを複数選択する気だ?
根本的に考え直した方がいいんじゃないのか?
0224221NGNG
I.E. のお気に入りのように項目の削除や移動ができるメニューを考えてます。
今の自分の方法だと一つ削除する毎にメニューが消えてしまうんです。
で、項目を一つ一つ削除するのが面倒だと感じたんです。
あるいは項目を選択しても消えないメニューを作れば良いよいのかもしれませんが、
こちらも方法が分かりません。
0225デフォルトの名無しさんNGNG
│
. \
  \
    \
     \   ∩─ー、   
       \/ ● 、_ `ヽ  
       / \( ●  ● |つ
       |   X_入__ノ   ミ メニューでやるなよwクマ・・・
        、 (_/   ノ
        \___ノ゙
        / 丶' ⌒ヽ:::
       / ヽ    / /:::
      / /へ ヘ/ /:::
      / \ ヾミ  /|:::
     (__/| \___ノ/:::

0226デフォルトの名無しさんNGNG
>>221がやると一つ消してもメニューが消えるから複数を一度に消してもメニューが消えそうだな。
0227デフォルトの名無しさんNGNG
IEのお気に入りはメヌーぢゃないから真似は無理
0228214NGNG
>>215
GetMenu はメニューのオーナーウィンドウからメニューハンドルを得ることはできますが、
メニューウィンドウ自信(クラス名が"#32768"のウィンドウ)から、
そのウィンドウに関連づけられたメニューを得ることはできません。
0229デフォルトの名無しさんNGNG
RichEditに書かれた文章をWordの校正機能を使ってチェックするようなことってできますか?
COM経由でそのような機能が提供されていたりしますか?
0230デフォルトの名無しさんNGNG
rebarに追加したバンドのタイトル文字列にショートカットキー表示
(&なんちゃらで指定する下線付きの文字)はできないんでしょうか?
&Aとかやると、そのまま&Aって表示されるので。
0231デフォルトの名無しさんNGNG
>>228
あ、悪い取り違えてた。

そもそも、メニュー自体にウィンドウハンドルってあったっけ?
あくまで「あるウィンドウに関連付けられた物」としてしか存在できなかったと思うんだが…

それって、見た目はメニューだけど実は他のもので代用とかしてない?
IEとか見たいにさ
0232デフォルトの名無しさんNGNG
実は別物って、IEは何使ってるんですか?
0233デフォルトの名無しさんNGNG
IEはツールバーだろ。スパって確認汁。
0234デフォルトの名無しさんNGNG
>>232
HSP
0235デフォルトの名無しさんNGNG
>>231
メニュー自体もウィンドウだし、ウィンドウハンドルもある。
0236デフォルトの名無しさんNGNG
ハァ?
じゃあメニューのHWNDを取得するAPI教えてみろよ。
0237デフォルトの名無しさんNGNG
>>236
結局は教えてほしいだけの様な悪寒
0238221NGNG
>>236
FindWindow なり EnumWindow なりなんなりで普通に取得できる。
0239デフォルトの名無しさんNGNG
ちなみに>>228にもあるようにクラス名は"#32768"だ。
0240デフォルトの名無しさんNGNG
TextOut(hdc,22 * cxCaps + 40 * cxChar,cyChar * i,szBuffer,wsprintf(szBuffer,TEXT("%5d"),GetSystemMetrics(sysmetrics[i].iIndex)));
すいませんこれってこういう書き方っていいんですか?→「szBuffer」
こういう引数ってどこから評価されるか未定義じゃないんですかね?
もし第4引数から評価されてたらおかしな結果になってしまいますよね?

(一応Win32API勉強してる途中でこういうコードがでたのでこのスレで)
0241デフォルトの名無しさんNGNG
なにを想定しているのかわからんが問題ないと思う
0242デフォルトの名無しさんNGNG
引数がどういう順番で評価されようとszBufferそのものの値は一緒だから問題はない。
まぁ、そういう書き方がいいか悪いは別だが。
0243デフォルトの名無しさんNGNG
>>240
>もし第4引数から評価されてたらおかしな結果になってしまいますよね?
ならない。

そんなこと言っているレベルなら、API の勉強をする前に
今一度ポインタの復習をした方がよいと思う。
0244240NGNG
あ、すいません。これって値じゃなくてポインタを渡してるんですね。
バカな質問で申し訳なかったです。
0245デフォルトの名無しさんNGNG
Clipboardクラスを使うにはどうしたらよいでしょうか?
#include<windows.h>だけじゃだめなんですか?

まったくの初心者をお救いください・・・(,,゚Д゚)†
0246デフォルトの名無しさんNGNG
>>245
Clipboardクラスって.NETのやつか?
0247デフォルトの名無しさんNGNG
メモリ上の実行ファイルを実行することは可能でしょうか?
圧縮ファイルからメモリ上に解凍して、直接実行したいと思うのですが。
0248デフォルトの名無しさんNGNG
メモリイメージ展開してジャンプしてやればいける


と適当かましてみる
0249デフォルトの名無しさんNGNG
UPXのソースを読むとか
APIはないね
0250デフォルトの名無しさんNGNG
今現在、シフトキーやコントロールキーが押されているかって、
どうやったら分かるんでしょうか?
WM_KEYDOWN,WM_KEYUPでチェックしていると、別ウィンドウに行って
押されたり、離されたりした場合に取りこぼしがおきちゃうんですが。
0251デフォルトの名無しさんNGNG
>>250
GetAsyncKeyState
0252デフォルトの名無しさんNGNG
>>250
ちょっと面倒になるけど、KeyboardHookで
0253デフォルトの名無しさんNGNG
>>251
thanxです。うまくいきまいた。
0254デフォルトの名無しさんNGNG
>>247
0. GetTempFileNameで一時的ファイル名を取得
1. CreateFileでEXEファイルを新規作成
2. CreateFileMappingでメモリ化、解凍先バッファとする
3. CloseHandle後、CreateProcess
ではあかんかえ?
0255デフォルトの名無しさんNGNG
ファイルからテキストを抽出するのにIFilterのAPIを呼び出して使いたいんですが、
使い方がよくわからないです。
取っ掛かりとしてサンプルコードないでしょうか。

Platform SDKの Indexing Service の項の英文眺めて悩んでます。
0256デフォルトの名無しさんNGNG
>>255
CoCreateInstance
0257255NGNG
>>256
頭悪くてわかりません。(-_-;
0258デフォルトの名無しさんNGNG
じゃあ、無理。
0259デフォルトの名無しさんNGNG
Windowsのシステムコールとはどの関数をさすのでしょうか。
kernel32.dllとntoskernel.exeのエクスポート関数のこと?
WIN32APIはカーネル関数のフレームワークなのか?
0260デフォルトの名無しさんNGNG
CreateWindow() 等でウィンドウを作成しようとした場合、
WM_CREATE の戻り値に -1 を指定すればウィンドウの作成を拒否することができますが、
CreateDialog() 等でダイアログを作成しようとした場合は、
WM_INITDIALOG ではダイアログの作成を拒否することができませんよね。
普通、コントロールの初期化は WM_INITDIALOG の中で行うと思うのですが、
コントロールの初期化に失敗した等の理由により、
ダイアログの作成を拒否したいケースもあると思うのです。
そのための方法を自分なりに考えてみたのですが、
グローバル変数に頼らざるをえなくなり、どうもスマートではありません。
スマートな方法があればぜひ教えていただきたいのですが…。よろしくお願いします。
0261260NGNG
うっ、sageてしまいました。長文ですみません。
0262デフォルトの名無しさんNGNG
>>260
作成を拒否するのは面倒そうなので、WM_INITDIALOG の中で EndDialog を
呼び出して即閉じてしまうのが簡単だと思います。
0263デフォルトの名無しさんNGNG
RaiseExceptionしとけ
0264デフォルトの名無しさんNGNG
自アプリ上のエディットコントロールでIEからのリンクのドロップをテキストデータで受け取りたいのですが、
IDataObject::EnumFormatEtcで受け取り可能なフォーマットを列挙させるとCF_TEXTが含まれていないのに
IDataObject::GetDataでCF_TEXTを要求すると正常なデータが取得できてしまいます。
この場合、CF_TEXTでの要求のまま実装して問題無いものでしょうか?それともGetClipboardFormat("UniformResourceLocator")で受け取るべきでしょうか?
0265デフォルトの名無しさんNGNG
保護モード上では直接ユーザーがI/Oポートを叩くことはできないから
カーネルやらデバイスドライバやらに外部とのやり取りを依頼する
でそのカーネルとかデバドラとのやりとりのためにインターフェイスが用意されてる
環境にもよるだろうけどそれのことをAPIとかシステムコールとか言っているのかな
多分int n命令を使ってそれらに処理をお願いすると思うのですが

具体的にいえばあるデバイスドライバとのインターフェイスを探しているのですが
そのためのライブラリがDLLという形でどこかに存在しているだろうときにどーやってそれを探し出せばいいのですか?
マニュアルかなぁ
誰か教えてください
ちなみにnational instrumentのデバイスです
疲れたポ
0266デフォルトの名無しさんNGNG
NT系なら、ユーザーモードから直接I/Oを読み書きする
方法があります。
http://www.gijyutu.com/g-soft/automa/nt/automa_nt.html
0267デフォルトの名無しさんNGNG
>266
よく読んでいないけどセキュリティホールではないのかな?
0268デフォルトの名無しさんNGNG
なんかドライバ作れ、ドライバ、って感じの話題に見えるんだが。
0269260NGNG
>>262
なるほど。WM_INITDIALOG の中で EndDialog() や DestroyWindow() を実行するのは
少し抵抗があったのですが、実験してみると確かに意図した通りの動作になりますね。
>>263
今回は例外処理を使う方法は見送りますが、参考になりました。

どうもありがとうございました。
0270デフォルトの名無しさんNGNG
>>267
ドライバのインストールを許してる状況なら
セキュリティもクソもないでしょ
0271デフォルトの名無しさんNGNG
質問です。

ScrollWindow(hwnd,0,cyChar * (iVertPos - si.nPos),NULL,NULL);
UpdateWindow(hwnd);

このUpdateWindow()を使う意味が分かりません。なぜですか?
ScrollWindow()はWM_PAINTをプロシージャに送りますよね?
そのあとUpdateWindowでまた送ってもしょうがないんじゃないんでしょうか。

調べてみたところすぐに更新するにはUpdateWindow()を使えとのことなんですが、
どうも意味が分かりません。
0272デフォルトの名無しさんNGNG
UpdateWindow

ウィンドウの更新領域が空でない場合、ウィンドウにWM_PAINT メッセージを送って、
そのクライアント領域を更新します。この関数は、アプリケーションキューを介さずに、
指定されたウィンドウのウィンドウプロシージャに直接 WM_PAINT メッセージを送ります。
更新領域が空のときには、メッセージは送りません。

0273デフォルトの名無しさんNGNG
>>271
>ScrollWindow()はWM_PAINTをプロシージャに送りますよね?

MSDN見てみたけど、更新リージョンを設定する、としか書いてないような気がするんだけど。
0274デフォルトの名無しさんNGNG
無効領域ができるとWM_PAINTメッセージがキューに入れられる
描画は時間がかかるので、WM_PAINTは優先順位が低く、
他のメッセージが先に処理され、その間にWM_PAINTが複数できると
1つにまとめられる。

UpdateWindowは、この後回しにされるキューにたまったWM_PAINTメッセージを
即送りつける機能がある。 別にWM_PAINTを直接送っているわけではない
0275デフォルトの名無しさんNGNG
I/O叩くだけのドライバなら結構簡単に作れるから
WDMの勉強した方が早いと思う
0276デフォルトの名無しさんNGNG
WNDCLASSEXの、
cbClsExtraと、
cbWndExtraの、
使い方を教えてくれませんか?
0277デフォルトの名無しさんNGNG
>>276
用途を聞いてるのか用法を聞いてるのか分からんが一応

用途
cbWndExtraはMDIの子ウィンドウ管理に使える。
しかしそれに限定されているわけではないので(cbClsExtraも含め)好きに使え。
用法
GetWindowLong, GetClassLongあたりを見れ。
0278デフォルトの名無しさんNGNG
Windows2000+VisualC++6.0でプログラムを書いています

Ctrl+Alt+Delで表示される「Windowsのセキュリティ」DialogBoxのタスクマネージャーボタンを
無効化したいのですが、方法がわかりません何かよい資料などありませんでしょうか?

FindWindow()でHandleを取得して、メッセージをHookすれば何とかなるかなと思ったんですが
上記のWindow名を調べる方法が判らず断念しました
0279デフォルトの名無しさんNGNG
>>272>>273>>274
なるほど。
ScrollWindow()はWM_PAINTをプロシージャに送るんじゃなくて、
クライアント領域を無効化して間接的にメッセージキューにポストしてるんですね。
直接送るものと勘違いしてました・・・
どうもありがとうございました。
0280デフォルトの名無しさんNGNG
開始と終了の時刻の差分で
経過時間の計算をしてるのですけど
途中でOSの時刻を修正されるとおかしなことになります。
OSの時刻に左右されずに経過時間を計るのにはどうしたらいいのでしょうか
0281デフォルトの名無しさんNGNG
QueryPerformanceCounter() / QueryPerformanceFrequency()
GetTickCount()

TickCountは49.7日で巻き戻るし、PerformanceCounterは稀にサポートしていない環境が
あったりはするが。
0282280NGNG
以前はSetTimer(1,1000)とかやって毎秒、変数をインクリメントしてたのですが
24時間とかやるとなんか精度がよくなかったです。
0283デフォルトの名無しさんNGNG
>>281
ありがとうございます!早速これらを使ってみたいと思います。
0284デフォルトの名無しさんNGNG
>>278
FindoWindowよりはEnumWindowのほうが良いかもね。

タスクマネージャを立ち上げさせたくないだけなら、フックのWH_SHELLで
HSHELL_TASKMANってのがあるみたい。
ただ、これでできるか試したことないけど。




0285デフォルトの名無しさんNGNG
280
QueryPerformanceCounterって動的にクロックが変動するCPUだとまずいらしいですね
GetTickCount()は49.7日で巻き戻るので使えないし(サーバなので1年とか稼動する可能性があるのです)・・うーん。
0286デフォルトの名無しさんNGNG
Win鯖を窓から投げ捨てろ
0287デフォルトの名無しさんNGNG
>285
時間差の大小を判断したら、49.7日目を跨いでも何ら問題ないと思うが。
0288280NGNG
GetTickCount()を使う場合は
レジストリの値を見て*49.7日足すしかないのでしょうか
うううそれだと49.7日たたないと動作確認ができない・・・
0289デフォルトの名無しさんNGNG
>>287
それだと49.8日後に0.1日しか経過してないことになってしまいませんか?
0290デフォルトの名無しさんNGNG
>>289
前回の値を保存しておいて前回の値より値が低ければカウンタがリセットされたとして処理すればいいだけかと
0291デフォルトの名無しさんNGNG
外から時間取ってくれば?
0292デフォルトの名無しさんNGNG
イソターネットに繋がってるサーバなら(s)ntpとかな。
0293デフォルトの名無しさんNGNG
>>290
なんとかその方法でやってみます
>>291
NTPとかでですか?
NTPサーバ立てる余地とかなくて。
0294デフォルトの名無しさんNGNG
というか単にunsignedで前回の値を引き算すればいいだけだろ
0295デフォルトの名無しさんNGNG
>>278
そんな事が出来たら、あなたはスーパーハカーになれます。
すなおにCtrl+Alt+Delを無効化すれ。
0296デフォルトの名無しさんNGNG
>294
どうれくらいの頻度で呼ばれるか分からないけど、
毎回差分を取るとGetTickCount()の誤差が累積されると思う。

しかしサーバーなら、そうそうOSの時刻を大きく修正されることも無いと思うんだがなぁ。
まあ対応しておくにこしたことはないが。
0297296NGNG
ああ、64bit整数とかでそのままの値で加算していくのなら誤差は累積されないか。
0298280NGNG
そういやunsignedでしたね
49.7日越えはレジストリに記録されるらしいので
そこを取ってきます。
みなさんありがとうございました。
0299デフォルトの名無しさんNGNG
>>296
よーく考えるとわかりますが、GetTickCount そのものの精度はともかく、
「差分を積算すること」自体では誤差は蓄積されません。
0300デフォルトの名無しさんNGNG
WM_TIMEハンドラを作って、__int64 でカウントはだめ?
0301デフォルトの名無しさんNGNG
WM_TIMEは指定秒でメッセージ発生するけど、それを受け取るのは
また別の話だからかなり不正確だぞ。
0302デフォルトの名無しさんNGNG
timeGetTime ないし、timeGetSystemTime 使えば?
0303デフォルトの名無しさんNGNG
>>301
長期的に見た誤差の累積について考えて出てきた案なんだが、却下か?
瞬間的な精度が必要な場合はハードでやった方がいい場合が多いだろ。
0304デフォルトの名無しさんNGNG
>>302
脳みそ足りないヤシは黙ってろよ。
0305デフォルトの名無しさんNGNG
スレッドをひとつ作成し、Event と、WaitForSingleObject で待機しながら、
__int64 な整数に時間を加算していくというのはどうか
0306デフォルトの名無しさんNGNG
MessageBoxを使用するとスクリーンの中央にダイアログが表示されてしまいます。
MFCを使うと親ウィンドウの中央に表示されるのですが。
これは何故でしょうか。そしてMFCの様にウィンドウの中央に表示させられないでしょうか。
0307デフォルトの名無しさんNGNG
>>306
第4引数の定数を弄りなさい
0308デフォルトの名無しさんNGNG
>>306
WM_INITDIALOGでMoveWindowは?
0309デフォルトの名無しさんNGNG
ろくに長時間の計算すらできないのはWindowsの仕様かしら
0310デフォルトの名無しさんNGNG
>>308
それはダイアログの場合でしょ。
0311デフォルトの名無しさんNGNG
長時間起動に耐えないんだから仕方ないんじゃないの
>>293
サーバ立てなくてもNTPサーバにアクセスする環境があればいいよ
eric.nc.u-tokyo.ac.jpとか
0312デフォルトの名無しさんNGNG
>>306
フックだよ。
MFCのソース嫁。
それが面倒だったら諦めれ。
0313デフォルトの名無しさんNGNG
#include<windows.h>

LRESULT CALLBACK WndProc(HWND hwnd , UINT msg , WPARAM wp , LPARAM lp) {
  switch (msg) {
    case WM_LBUTTONUP:
      MessageBox(NULL , "", "", MB_OK);
      SendMessage(hwnd, WM_CLOSE, 0, 0);
      return 0;

    case WM_DESTROY:
      PostQuitMessage(0);
      return 0;
  }
  return DefWindowProc(hwnd , msg , wp , lp);
}

↑のプログラム(WinMainは省略, ウィンドウを1つ作成)を実行させ、
ウィンドウ内で左クリックすると、1つ目のダイアログが出ます。
OKボタンを押さなければ、ウィンドウプロシージャを抜けないので、
メッセージループにも制御が戻らないと思ったのですが、
その状態で再び左クリックすると、もう1つダイアログが表示されます。
この挙動がいまいち理解できません。
なぜ2つ目のダイアログは表示されるのでしょうか?
0314デフォルトの名無しさんNGNG
>>313
抜けなくてもまた入ってくるけど。
メッセージボックスを移動させたりしたときにウィンドウを再描画するのは誰だい?
0315デフォルトの名無しさんNGNG
>313
>MessageBox(NULL , "", "", MB_OK);
MessageBox(hwnd , "", "", MB_OK);
0316デフォルトの名無しさんNGNG
も一つ
MessageBox(NULL , "", "", MB_OK | MB_TASKMODAL);
まあようするにMSDN嫁と
0317デフォルトの名無しさんNGNG
>>315、316
質問の意図はそういうことじゃないでしょ。

>>313
MessageBox内でも独自のメッセージループが回ってるわけで
結局はそこのDispatchMessageでウィンドウプロシージャに飛ばされ
そこで処理されると言うわけ。
0318デフォルトの名無しさんNGNG
>>312
MFCってずっとフックをインストールしっぱなしなんですか。
なんかフックって長い間インストールしてると固まったりする
原因になるイメージが有るのでちょっとびっくり。
0319デフォルトの名無しさんNGNG
フック開始
↓
ダイアログとか表示させる
↓
コールバックでいじる
↓
フック終了

位置を変えるだけなら、直前で仕掛けて直後に閉めればいいべさ。
0320デフォルトの名無しさんNGNG
>>314-317
レスありがとうございました。
>MessageBox内でも独自のメッセージループが回ってる
この説明で納得できました。感謝します。
0321デフォルトの名無しさんNGNG
>>319
あ、勿論そうするつもりです。
ただMFCの場合、何時何処でWin32APIのMessageBox呼び出しても
親ウィンドウの中央に表示される所を見るとインストールしっぱなしなんだろうなと。
0322デフォルトの名無しさんNGNG
>>321
MFCのMessageBox呼んでるんじゃないか?それは。
WIN32APIのMessageBoxを直接呼んでそうなるとは思わないのだが。
0323デフォルトの名無しさんNGNG
>>322
試してみれば分かりますがそうなります。
0324デフォルトの名無しさんNGNG
オーナー指定したらオーナーの中央に表示されるよね。
フックもなんもないと思うのですが…。
0325デフォルトの名無しさんNGNG
>>324
されないから問題ないわけで。
0326324NGNG
VC++スレと勘違いしておりますた…。ゴメン。
確かにSDKだとされないですね。むむむ。
0327やよNGNG
WMIをJavaで使うことはできますか?
0328デフォルトの名無しさんNGNG
waveOutPauseを呼び出したあとwaveOutResetを経てwaveOutWriteを呼び出すと
PCMデータ再生の前に一瞬ノイズが発生するのですが、これの回避方法って知りませんか?
waveOutPauseとwaveOutResetの間で1[msec]でも時間が経過してると発生するようです。

[例]
 waveOutPause(hWaveOut);
 // この間に経過時間があるとノイズがはいる↓
 Sleep(1000);
 // この間に経過時間があるとノイズがはいる↑
 waveOutReset(hWaveOut);
 waveOutWrite(hWaveOut, &WaveHeader, sizeof(WAVEHDR)); // ここでノイズ発生

ちなみにのwaveOutWriteの替わりにwaveOutRestartでもノイズが発生しました。
waveOut関数でサウンドプレイヤーをと思ってましたが、一時停止→停止→再生という手順で
ノイズがでるので困ってます。
0329デフォルトの名無しさんNGNG
>>328
プツッというノイズなら、サンプル値の不連続だろう。
停止の前後でフェードアウト・フェードインさせるとか、
補間用の中間値サンプルを捏造して挿入とか、
そういうのがいるんじゃないか?
0330デフォルトの名無しさんNGNG
>328
多分デバイスの問題かと。
Resetしても一部のメモリが既に、
DirectSoundで言うところのプライマリサウンドバッファにコピーされてしまって、
キャンセルできない状態なんだと思う。

多分、その停止した状態で、別の音を鳴らすソフトを動かしてもノイズが出ると思うんだけど。
0331デフォルトの名無しさんNGNG
こんにちは

ListView_(リスト関連API)の全リストが載ったサイトってありますか?
MSDN内を調べたのですが、見つかりませんでした。
0332デフォルトの名無しさんNGNG
>>331
commctrl.h を読め
0333デフォルトの名無しさんNGNG
>>331
SDKドキュメントブラウザで”ListView_”をキーワードに入力すれば大抵のはでてくるが。
0334デフォルトの名無しさんNGNG
>>332
commctrlって、CE?
0335デフォルトの名無しさんNGNG
>>334
( ゚д゚) <‥‥‥
0336デフォルトの名無しさんNGNG
普通のwin32はcomctl32.hだと思ったが
気のせいだったか
0337デフォルトの名無しさんNGNG
>>336
comctl32.lib
winmm.libとmmsystem.hとかもそうだよなぁ…
0338デフォルトの名無しさんNGNG
>>278 遅レススマンがレジストリいじれば出来る。ポリシーでも出来たかも。 どのキーかは会社行かんとわからんので略。
0339デフォルトの名無しさんNGNG
2つのスレッドが同じデータにアクセスする状況で
1つ目のスレッドは書き込みのみ、2つ目のスレッドは読み込みのみしか行わないのですが
「クリティカルセクション」とかを使わないとだめでしょうか。
0340デフォルトの名無しさんNGNG
その読み書きがCPUにとってアトミックにできるなら、不要。
4バイト以下だったら大丈夫なはず。(64bit環境なら8バイト)
参考までに、Interlocked系のAPIを見てみてね。
0341デフォルトの名無しさんNGNG
CriticalSectionを使うことをためらう理由は別にないだろう。
0342デフォルトの名無しさんNGNG
>339
読み取りと書き込みをアトミックに行える状況でないなら、
変更中のものを読んでしまう場合があります。

OKな例
・普通のintやポインタの読み書き
・unix系のファイルシステムで、書き込み側がtmpファイルとrenameを使う場合読み込み側はロック不要
 (windows系はファイルエントリの扱いがアトミックかどうか明示してないので不明
0343デフォルトの名無しさんNGNG
>>341
場合によってはあるだろ。
0344デフォルトの名無しさんNGNG
みなさんレスどーもです。
CriticalSection使うことにします。ちょっと遅くなるとか聞いたんで。。
ありがとうございました。
0345デフォルトの名無しさんNGNG
>>339
2CPU(HT含む)またはそれまで想定するときは、
それがたとえ1 DWORDであっても、クリティカルセクションを定義する必要があります。

また1CPUのときでも、たとえばDWORDがDWORD境界にないような場合は、
ひとつのインストラクションの途中でページフォルトが発生し得るので、
その例外処理が完了して中断していたインストラクションの実行を再開する準備が整ったとき、
プロセス内のどのスレッドが一番最初にCPUのスケジューリングを勝ち取るかは、
多分、そのときの運次第と思います。
0346デフォルトの名無しさんNGNG
>>345
> 2CPU(HT含む)またはそれまで想定するときは、
> それがたとえ1 DWORDであっても、クリティカルセクションを定義する必要があります。

本当?
0347デフォルトの名無しさんNGNG
>>345
1bitのフラグの場合はどう?だめ?
0348デフォルトの名無しさんNGNG
>>345
前半は説明がないね。

後半、存在する側のページに
DWORDのたとえば半分だけが書き込まれることはないと思うけど・・・

しったか君かな?
0349デフォルトの名無しさんNGNG
つーか、そんなDWORDを書き込むのはどこぞのCPUだけではないのかな?
0350デフォルトの名無しさんNGNG
Win32では問題無いが
境界越えアクセスできないCPUと妙な実装のコンパイラのセットならありえるかも
0351デフォルトの名無しさんNGNG
読み手が値を参照するだけならロック不要
値を参照してその値を更新するような書き手が複数いるんであれば要ロック
0352デフォルトの名無しさんNGNG
ページフォールトの処理が完了する前にプロセス・スレッドを切り替えるようなOSは
あまり考えられないなー。そもそも Win32 API スレだしさ。
0353デフォルトの名無しさんNGNG
>>351
マルチライトが危険でワンライト・マルチリードなら安全
という考えは一見、正解のようにも見えるが
リード中にライトされるとずっこける可能性があるよな

リード動作がどんな条件でアトミックかをつきとめ、
その条件がアプリ全体の前提環境と整合するかどうか
確認が必要だね
0354デフォルトの名無しさんNGNG
>>353
そうだね。
多分だけど、実際には多分読み手(複数対応)のセマフォと書き手のセマフォを使う事になると思う。
0355デフォルトの名無しさんNGNG
つか、APIレベルでリーダ・ライタロックが提供されてないのは微妙に不便だよな。
ACEあたりの使えばいいのかもしれんが。
0356デフォルトの名無しさんNGNG
>>353
>リード中にライトされるとずっこける可能性があるよな
どういう可能性?
0357デフォルトの名無しさんNGNG
アトミックじゃないとき。
0358デフォルトの名無しさんNGNG
リード中にライト可能なメモリ持ったマシンって存在するの?
特にWin32が動くやつで。
0359デフォルトの名無しさんNGNG
>>356
たとえば100KBのメモリを読み書きするとき
0360デフォルトの名無しさんNGNG
>>357
それは、アトミックでないものをアトミックだと思って
使う奴が馬鹿なだけでは?コンパイラの実装とかも含めて。
0361デフォルトの名無しさんNGNG
>>360
はぁ、そうだけど?
0362デフォルトの名無しさんNGNG
DWORDとかポインタとかの話してるんじゃなかったのか?>>361
それじゃーーアトミックかどうかなんて考えるまでもないじゃん。
0363デフォルトの名無しさんNGNG
>>362
そうだけど。
すまんがなんで一生懸命なのか、いまいちよくわかってないんだが。
0364デフォルトの名無しさんNGNG
誰が一生懸命なの?
0365346NGNG
>>363
俺は少し一生懸命だったかも知れん。
もし345が本当だったら今から夜逃げしなくちゃいけないからな(w
0366デフォルトの名無しさんNGNG
>>365
345は、さすがにネタだろうと思うよ。
0367デフォルトの名無しさんNGNG
CreateProcessの第二引数はなんでconst付いてないの?
書き換わることあるの?
BOOL CreateProcess(
 LPCTSTR lpApplicationName,
 LPTSTR lpCommandLine,
  :(以下略)
0368デフォルトの名無しさんNGNG
>>367
ソース嫁! ソース!
0369デフォルトの名無しさんNGNG
確立が低いってのは通常ダメなんだよな
完全にゼロか、そうでなきゃリスク管理ができてないと
0370デフォルトの名無しさんNGNG
で、ページ境界をまたがった書き込みはアトミックなの?
これに尽きると思うんだが誰も言わないねえ
0371デフォルトの名無しさんNGNG
350、352じゃダメなの?>>370
0372デフォルトの名無しさんNGNG
MMUはどこにいったんだ?
0373デフォルトの名無しさんNGNG
ASMのコード吐き出して見りゃわかるべぇ。
0374デフォルトの名無しさんNGNG
ページフォルトが起こるときはまだ命令の実行前でしょ。
だからメモリへの書き込み自体が行われていない。
当然、データの一部のみが書き込まれることなどあり得ない。

・・・はず。
0375デフォルトの名無しさんNGNG
現在CD再生を行なうクラスを作成しています。

ボリュームをコントロールするのにオーディオミキサを使用し、
CDドライブ単位でコントロールをしたいと考えているのですが、
その方法が分かりません。

オーディオラインがどのドライブのモノなのか識別する方法は
無いのでしょうか?
0376デフォルトの名無しさんNGNG
無い
0377328NGNG
>>328の経過
waveOutPause〜waveOutResetの間でSleep入れてましたが、
Sleepで間を置いてるからノイズが聞き取りやすかっただけで、
実際にはwaveOutPause→waveOutResetの手順をふむだけでノイズが発生してました。

このノイズ、どうやら直前まで再生していたPCMの音がほんの一瞬再生されるもののようです。

waveOutReset呼び出しの後、waveOutGetPositionで調べたら
再生位置はちゃんと0にリセットされてましたし何が原因なのかいまだに不明です。

ちなみに同じプログラムをふたつ実行させると、片方でPCMが再生されている間は
ノイズは発生しませんでした。
0378デフォルトの名無しさんNGNG
Microsoft Win32 と Microsoft .NET Framework API との対応
ttp://www.microsoft.com/japan/msdn/net/general/win32map.asp

いつまでもWin32API使ってねぇで
.NET Frameworkに移行しろやゴルァ!ってこと?
0379デフォルトの名無しさんNGNG
>>378
まだまだ、半分くらいは対応出来てませんスミマセンってこったろ。
0380デフォルトの名無しさんNGNG
>>377
サウンドのデバイスドライバが原因かもしれん
0381デフォルトの名無しさんNGNG
Microsoft .NET Framework API ってWinFXと同じなの?
0382375NGNG
>>376
可能ならばCDクラス内にボリュームメソッドを実装させたいと考えていたのですが、無いなら仕方ないですね。
ミキサクラスを作って実装させる事にします。
ありがとうございました。
0383デフォルトの名無しさんNGNG
キャッシュ可能メモリへのアクセスで、バス幅、キャッシュ・ライン、ページ境界をまた
がっているものは、アトミック操作が保証されない。Pentium 4 プロセッサおよびP6 ファミリ・
プロセッサは、外部メモリ・サブシステムによってこのようなスプリット・アクセスをアト
ミック操作にできるようにするバス制御信号を備えているが、アライメントの合っていない
データ・アクセスを行うとプロセッサの処理能力に重大な影響を及ぼすため、使用を避けるべ
きである。
0384デフォルトの名無しさんNGNG
>>383
ソースを明示しようね!
0385デフォルトの名無しさんNGNG
「インテル・アーキテクチャ
ソフトウェア・ディベロッパーズ・
マニュアル
下巻:
システム・プログラミング・ガイド」の7-3

どこにリンクされているかは、ちょっと分からない。
ググればあるかも。
0386デフォルトの名無しさんNGNG
普通にアライメントきっててそんな境界にまたがるもんなの?
0387デフォルトの名無しさんNGNG
ありえるとしたら、メモリマップトファイルかなあ。
ファイルに格納するときって、アラインあんまり気にしないし・・・
0388デフォルトの名無しさんNGNG
>>385
http://developer.intel.com/design/Pentium4/documentation.htm
0389デフォルトの名無しさんNGNG
ttp://assist.net.fukushima-u.ac.jp/~taka/doc/IA32/IA32_Man3_system-programming-guide.pdf

日本語版。
0390デフォルトの名無しさんNGNG
> The variable pointed to by the Addend parameter must be aligned on a
> 32-bit boundary; otherwise, this function will fail on multiprocessor x86
> systems and any non-x86 systems.
ユニプロセッサのx86なら問題なし
0391デフォルトの名無しさんNGNG
>>390
でも、WinXPでの動作を前提にマルチスレッドで書くなら
まずいっしょ。
0392278NGNG
レスくれたみなさんありがとうございます。まだ解決はしていませんが
途中経過を報告します

>>284
当面、タスクマネージャーが立ち上がらなくなれば良いので試してみたのですが
WH_SHELLのHSHELL_TASKMANは、hookプロシージャーに送られて来ず駄目でした

>>295
アドバイスありがとうございます。NT系でのCtrl+Alt+Delの無効化って、msgina.dllを
置き換えるんですよね?
取り敢えず、最後の手段として他の方法を摸索してみます

>>338
レジストリをいじれば可能なんですか、ありがとうございます(ポリシーはちょっと
見てみたのですが出来ないようです)
ところで、設定に使われているレジストリキーの詳細な内容が解説されているサイトか
書籍があれば紹介して頂きたいのですがご存じないでしょうか?
0393デフォルトの名無しさんNGNG
アライメントが合ってないなんて意識的に#pragma packするか
387の言うようにメモリマップドファイルの時くらいじゃないの?
だから、あまり気にならないな。
0394デフォルトの名無しさんNGNG
質問です。
ダイアログ上に配置されたすべてのコントロールの大きさを
一定の比率で動的に変化させる便利な方法があれば教えてください。
例えば、ダイアログ自体が WM_SETFONT を受け付けてくれれば
よかったのですが、残念ながら動作してくれないようなので…。
0395デフォルトの名無しさんNGNG
メモリマップトファイルは必ず64KB境界にマップされたような
0396デフォルトの名無しさんNGNG
>>395
ファイルの中にあるDWORDデータとかのアライメントの話。
0397デフォルトの名無しさんNGNG
質問です。
WinMain関数の中で、ウインドウクラスの登録とウインドウの作成の処理を
別関数にして行っているものがあります。
↓こんな感じ
int WinMain
{
  MyRegisterClass()←ここでウインドウクラスの登録
  InitInstance()←ここでウインドウの作成
  メッセージループ
}

上のMyRegisterClass関数の中で、たいていは
  WNDCLASSEX wc; ←関数内のローカル変数になっている。
  wc.member=hogehoge;
  RegisterClassEx(&wc);
なんて感じになってるんですが、
クラスを登録してしまった後は、このwcは破棄してしまってよいのでしょうか?
あとでウインドウを作成するときにクラスの名前は必要ですが、
この構造体自体は不要?
動くには動いていますが、ちょっと不安になった。
0398278NGNG
>>>284
>当面、タスクマネージャーが立ち上がらなくなれば良いので試してみたのですが
>WH_SHELLのHSHELL_TASKMANは、hookプロシージャーに送られて来ず駄目でした

の追記です。
上記の操作はAppDesktopWindowのHookで、Ctrl+Alt+Delで呼び出されるLoginDesktopWindowとは
スレッドが違う為にHookできないという風に理解したんですが、あってますか?

もしそうなら、LoginDesktopWindowやScreensaverDesktopWindowのハンドルを取得できればHook
出来そうな気がするんですが、方法は無いんでしょうか?


0399デフォルトの名無しさんNGNG
>>397
wcの情報はWindows側にコピーされているから大丈夫
0400デフォルトの名無しさんNGNG
質問失礼します。

現在マルチスレッドのプログラムを組んでいて、
メインループの一部で
EnterCriticalSection(&cs);
data.state = state;
LeaveCriticalSection(&cs);

スレッドのwhileループ内で
EnterCriticalSection(&cs);
State state = pData->state;
LeaveCriticalSection(&cs);

としているのですが、何故かメインループ内のstate(代入した方)の値の一部が異常になります。
上のどちらか一方をコメントアウトしてやると正常値を示すので
ここが原因ではないかと思うんですが、メインループのほうを
State s = state;
data.state = s;

のようにしても結果は同じでした。ほかの箇所が原因なんでしょうか?
もちろんpDataはdataへのポインタで、Stateは自作のクラスです。

プログラミング初心者でマルチスレッドは初めてなもので、
上のコードに問題があるのかどうか全く分かりません。
皆さんの考えをお聞かせください。
0401デフォルトの名無しさんNGNG
>>400の説明意味わからないし、APIには関係ないし
プログラムのミスだと思うのでよく確かめてください
0402デフォルトの名無しさんNGNG
ところで cs はどこで宣言してるの?
0403デフォルトの名無しさんNGNG
>>394
よくわかんないけど、ダイアログベース単位とか使うのは?
0404400NGNG
>>401
さっきから確かめていますがまだ分からないです。
気長にチェックしてみることにします。

>>402
グローバル変数にして、WM_CREATEのところでInitializeしてます。
0405デフォルトの名無しさんNGNG
>>404
マルチスレッド対応のランタイムライブラリを使用していないとか
0406400NGNG
なんでしょうかそれ?
してないかもしれません・・・。
どうやればいいんですか?
0407デフォルトの名無しさんNGNG
VC++.NET2003なら
メニューの[プロジェクト]-[(プロジェクト名)プロパティ]からダイアログ表示して
[構成プロパティ]-[C++]-[コード生成]のページにランタイムライブラリの項目がある
0408400NGNG
>>407
レスどうもです。
シングルスレッドのままだったので修正しました。
でもまだ直りません。
プログラム上のミスとのことなので地道に調べてみます。
0409デフォルトの名無しさんNGNG
>>408
volatileをつけてみれたら?
0410デフォルトの名無しさんNGNG
あとは、CreateThread使ってるなら、_beginthreadex使うとか
0411デフォルトの名無しさんNGNG
_beginthreadexは過去との互換性のために残されてるだけなので
スレッド内でCランタイム関数を使わない場合CreateThreadで動くはず
0412デフォルトの名無しさんNGNG
Cランタイムを使う場合はどうするんですか
0413デフォルトの名無しさんNGNG
_beginthreadex使うとか
0414デフォルトの名無しさんNGNG
>>400
知恵が足りないときはデバッガで「なぜか変更される値」のアドレスにウォッチ仕掛けて、
いつ変更されるのか見てみれば?やり方はマニュアル読んで。
漏れも再現性高くてロジック追うの面倒なときはよくやるよ。
0415デフォルトの名無しさんNGNG
>400
>EnterCriticalSection(&cs);
>data.state = state;
>LeaveCriticalSection(&cs);
このメイン側のstateはどこから来てるねん?
0416デフォルトの名無しさんNGNG
>>400
> 値の一部が異常になります。
> Stateは自作のクラスです。

具体的にはどんな型のデータがおかしくなるん?
ちゃんと代入演算子のオーバーロードしてないとかは?
0417デフォルトの名無しさんNGNG
DeviceIoControl()でIOCTL_STORAGE_GET_MEDIA_TYPESを
しようとすると内蔵FDD以外でERROR_INVALID_FUNCTION
になるんですがそういうものなんですか?
0418デフォルトの名無しさんNGNG
CreateProcess の仕様について、ご存知の方がいらっしゃいましたら、確認させてください。

・NTから存在するコマンドライン文字列の長さ制限は、
 UNICODE_STRINGのLengthがUSHORTになっていることに由来するもので、
 呼び出し側の工夫で回避することは不可能。
・引数(実行ファイル部を除く)部分のクォート処理は、
 OS自体に仕様はなく、C言語スタートアップの実装に依存する。

以上のような理解で問題ないでしょうか?
0419394NGNG
>>403
レスをどうもありがとうございます。
質問の意味が分かりにくかったかもしれません。

複数の子ウィンドウの位置とサイズを動的に変更したい場合、
DeferWindowPos() 系が使えますが、汎用的なコーディングをしようとすると、
まず EnumChildWindows() 等で全ての子ウィンドウを列挙する必要があり、結構面倒です。
もしかすると対象がダイアログ上のコントロールの場合には
もっと楽な方法があるんじゃないのかな、と思ったものですから…。
0420デフォルトの名無しさんNGNG
> ・NTから存在するコマンドライン文字列の長さ制限は、
> UNICODE_STRINGのLengthがUSHORTになっていることに由来するもので、
> 呼び出し側の工夫で回避することは不可能。
それはCreateProcessじゃなくて、BSTRの話。
M$製の多くの開発ツールは"@ファイル名"を実装することによって回避している。

> ・引数(実行ファイル部を除く)部分のクォート処理は、
> OS自体に仕様はなく、C言語スタートアップの実装に依存する。
御意。
0421デフォルトの名無しさんNGNG
>>418
CreateProcessって時点でOSはWindowsに限定だろ
OS自体に仕様はなくって発想には正誤とは無関係に問題があるぞ
link.exeのオプションあたり調べてみなって
0422デフォルトの名無しさんNGNG
>>420
BSTRとUNICODE_STRINGは別物だが…
Win32 APIのレベルではLPCSTRでもネイティブAPIまで降りてくると
UNICODE_STRINGで管理されてるから無理って話でしょ
0423デフォルトの名無しさんNGNG
質問です。文字がユニコードだとMSゴシックは駄目なんですか?
いろいろやっても明朝っぽいんですけど
0424400NGNG
原因がわかりました。単純なミスでした。

おかしくなる値はint型だったのですが、
その計算の過程でStateのメンバーのポインタ変数を
代入処理後も初期化無しで参照していました。

全然APIと関係なかったですが、おかげさまで解決しました。
いろいろアドバイスをくれた皆様、どうもありがとうございました。
0425デフォルトの名無しさんNGNG
オーナードローボタンを作ったら、
ダブルクリックに判定されたクリックの時に、
WM_DRAWITEMが送られないんだけどなんとかする方法ありますか?
0426デフォルトの名無しさんNGNG
すみません、GINAの仕様を日本語で読みたいのですが、
どこかよいサイトをご存じないでしょうか?
Web上に無ければ、5K円位までなら書籍でもかまいません。
識者の方よろしくお願いします。
0427デフォルトの名無しさんNGNG
>>398
だからそんな事が出来たらスー(ry

マジレスするとLoginDesktopWindowやScreensaverDesktopWindowとは
デスクトップ自体が違うので、どうがんばっても取得できないんですよ。
0428デフォルトの名無しさんNGNG
>>426
これじゃダメ?
ttp://www.cisnet.or.jp/home/tsuneoka/win32tech/6.html
0429デフォルトの名無しさんNGNG
>>398
じゃあ、WH_CBTのHCBT_CREATEWNDは?
これもできるか知らんけど。
0430みーNGNG
プリンタステータスの監視をするプログラミングを書くにはどのようなAPIを使えばいいでしょうか?
0431デフォルトの名無しさんNGNG
>>429
もういいから藻前はMSDNのWindowStationとDesktopの項を
100回読み終えるまで帰ってくるな
0432デフォルトの名無しさんNGNG
>>430
GetPrinter(), GetPrinterData(), OpenPrinter() あたりじゃないか?
0433デフォルトの名無しさんNGNG
ステータスがインク残量とかそういうレベルであれば、WIN32APIだけで
どーこー出来る話ではないな。
0434みーNGNG
電源の状態とか印刷中とかアイドル中とか、そういうことを取得したいと思っています。
0435デフォルトの名無しさんNGNG
>>434
EnumJobs()かな?
電源はしらない
0436デルファイの名無しさんNGNG
こんにちわ。

PCに存在するCOMMポート、およびその名前の列挙方法を教えてください。

とあるCOMMポートをつないで操作するプログラムを組みたいんですが、
USB−COM変換ケーブルを使おうと思います。
そこで、その変換ケーブルの名称から、COMMポート番号を割出すことが
出来たらなあ、とおもっております。

よろしくおねがいします。
0437デフォルトの名無しさんNGNG
間に仮想COMドライバが入って普通のCOMと同様に
扱われるはず

デバイス名COM**でCreateFileして使えるか使えないか
調べるのは駄目ですか?
特殊なことをしない限りCOM1〜9を探せばOKだと思うし
0438デフォルトの名無しさんNGNG
>>436
COMポートの列挙は>>437の言うとおり、
COMxを片っ端からCreateFileしていくか

レジストリの
「HKEY_LOCAL_MACHINE\Hardware\DeviceMap\SerialComm」
に格納されてる。

デバイスの名前はGetCommPropertiesで取得できる・・・と思う
0439デフォルトの名無しさんNGNG
IMEの扱い方がわかりません。
いいページありますか?
0440デフォルトの名無しさんNGNG
>>431
ここは、あなたのような煽る事しかできない優秀な方の来るところではありません
有益な情報を提供できる人の来るところです
0441デフォルトの名無しさんNGNG
>>431
言葉が足りなかったか?
元々の目的がタスクマネージャの起動阻止だったから、>>429の方法で
タスクマネージャのウィンドウを破棄すれば実現できないかと思ったんだが…

とりあえず、>>429の方法で全ウィンドウ破棄するよう組んで試したところ
起動阻止はできた。
だが、問題はタスクマネージャのウィンドウを特定することかもしれん。

クラスで判断しようにも共通ダイアログクラスだし、キャプションもフックの時点
では、まだ設定されていないみたいだし。
0442デルファイの名無しさんNGNG
>>437,>>438

ありがとうございます。

それをキーにしてさがしてきます。

ではでは

0443397NGNG
>>399
ありがとう。遅レススマンコ。
これで安心して、MyRegisterClassから抜けられます。
0444デフォルトの名無しさんNGNG
GetWindowThreadProcessId
OpenProcess
EnumProcessModules
GetModuleFileNameEx
taskmgr.exeと文字列を比較
0445デフォルトの名無しさんNGNG
猫サイトで、
HWND hDlg
をいきなりゼロじゃないかを見てるんですけど、
確かにデバッグしてみると、宣言直後は必ずゼロ
になっています。
HWNDクラスって、コンストラクタで値を初期化してるのでしょうか?
0446デフォルトの名無しさんNGNG
>>445
static 変数や、外部変数でなくてか?
0447445NGNG
>>446
外部変数です。
外部変数は0で初期化されるのですか?
0448デフォルトの名無しさんNGNG
>>447
メモリ・イメージとしてゼロクリアされる
まがWindows環境ならNULLと考えても
おそらく差し支えはなかろうが
俺はそういうの嫌いだから

HWND hDlg = NULL;

と書くようにしてる
0449デフォルトの名無しさんNGNG
> メモリ・イメージとしてゼロクリアされる

ちがうよ。 =0 と同じになるんだよ。
0450デフォルトの名無しさんNGNG
>>448-449
どうもです。
納得できました。
あやふやのまま進めなかったもんで・・・
0451デフォルトの名無しさんNGNG
>>449
釣りか?
0452デフォルトの名無しさんNGNG
>>448
不要な初期化でもさぼらない心がけはよいが、
根拠がまちがっている。
ttp://www.catnet.ne.jp/kouno/c_faq/c1.html#30
0453デフォルトの名無しさんNGNG
AnimateWindowで非表示にしてもタスクバーのボタンが消えないのは何で?
0454デフォルトの名無しさんNGNG
HWNDクラスには誰も突っ込まんのかw
0455デフォルトの名無しさんNGNG
MFCを使わないでExcelを操作するサンプルありませんか?
0456デフォルトの名無しさんNGNG
操作は出来ます
サンプルはしりません('A`)
0457デフォルトの名無しさんNGNG
そりゃ、できるでしょうけど
0458デフォルトの名無しさんNGNG
OLEVariantはMFC?
0459デフォルトの名無しさんNGNG
CoCreateInstance()とか
0460デフォルトの名無しさんNGNG
system("excel.exe");
0461デフォルトの名無しさんNGNG
>>455
ググれば山のように出てくる。
ttp://www.google.co.jp/search?num=30&hl=ja&ie=UTF-8&oe=UTF-8&c2coff=1&q=Excel+vc&lr=lang_ja
0462デフォルトの名無しさんNGNG
Win32 API のファイルI/Oにテキストモードという概念は無いのでしょうか?
0463デフォルトの名無しさんNGNG
>>462
大人しくfopenつかっとれ
0464デフォルトの名無しさんNGNG
>>463
みなさん大人しくfopen使ってるんすかねー?
0465デフォルトの名無しさんNGNG
改行コード変換するだけならどうにでもなるような
0466デフォルトの名無しさんNGNG
>>464
使ってる。ローカルファイルの一般的な展開にわざわざWin32APIを使うのは稀。
MFCのCFile系統も必要なし。
将来の別プラットホームや別プロジェクトへの移植も考えると、C標準でほぼ十分。
0467デフォルトの名無しさんNGNG
>>464
俺はテキストモード使わないな。必要なら自分で変換する。
勝手に変換されるのが気持ち悪いんでね。
0468デフォルトの名無しさんNGNG
>>464
もちろん。
エンドユーザレベルからアナログ回路まで
抽象度の高い順に選んで使う。
0469462NGNG
fopen() じゃ GetLastError() は使えないですよね
0470デフォルトの名無しさんNGNG
どなたかご存知の方がいらしたらご教授お願いします。
エクスプローラ→フォルダオプション→表示→詳細設定にある項目について
レジストリの該当部分を直接変更した後、現在開いているウィンドウに対しても即座に
変更を反映させたいと考えています。(すなわち[適用]ボタンを押すのと同じことをプログラム
で実現したいと考えています)
・SHChangeNotify(SHCNE_ALLEVENTS, 0, NULL, NULL); 引数色々変えても駄目
・SHGetSetSettings win9xで使えない。即座に反映しない。
・SendMessage(HWND_BROADCAST, WM_SETTINGCHANGE, 0, 0); 駄目
・explorer.exe再起動 ウィンドウが閉じてしまう。不安定になる。
と色々試しましたがことごとく駄目でした。
どなたか同様のことを実現された方はいらっしゃらないでしょうか?
0471デフォルトの名無しさんNGNG
>>469
Cランタイム関数のエラーコードはerrnoを見れ。
0472470NGNG
補足です:
F5では即座に反映されないようです。
同様にIShellView Refreshも駄目のようです。
0473デフォルトの名無しさんNGNG
ES_MULTILINE, WS_HSCROLL, WS_EX_CLIENTEDGEで作成したエディットは
複数行で水平スクロールバーがあって端がへこんでいるような見かけですが、
エディットの中にちょうどフォントが10個ぶん縦に並ぶような高さは
どうすれば求められるのでしょうか?

edit_h = font_h * 10 + GetSystemMetrics(SM_CYEDGE) * 2
            + GetSystemMetrics(SM_CYHSCROLL)

このedit_hでCreateWindowEx()したのですが
なんだかおかしいようなのです
0474デフォルトの名無しさんNGNG
>>470
>・SendMessage(HWND_BROADCAST, WM_SETTINGCHANGE, 0, 0); 駄目

Windows2000以降は、HWND_BROADCASTは使えないよ。
EnumWindows()などを使って個別にメッセージ送信してみたら?
解決する保証はしないけどね。
0475デフォルトの名無しさんNGNG
他のプログラムへのパケットを見るAPIってあります?
0476デフォルトの名無しさんNGNG
>>475
なんてことを聞く香具師はパケットを覗いても意味わからんと思う。
0477デフォルトの名無しさんNGNG
勉強したいんで教えてください。fook?hookとかかなと思って
ググってますけどそれらしきのでてこなかったです。
0478デフォルトの名無しさんNGNG
ドライバを使わないパケットダンプ
で検索しる
0479デフォルトの名無しさんNGNG
ttp://homepage2.nifty.com/spw/tips/PacketDump.html
にたどり着きました!!ありがとうございます。
0480470NGNG
EnumWindows()で個別に送っても駄目でした。
SendMessage(HWND, WM_SETTINGCHANGE, 0, 0);
自体に効果がないようです。

ユーティリティ系のソフト作成において結構需要のあることだと考えていましたが、
これだけ探して見つからないということはそうでもないようですね(泣)
0481デフォルトの名無しさんNGNG
マウスボタンが押されていない状態で現在のマウスポインタの位置の最前面の可視の
ウィンドウを取得したいのですが、何を使えばいいんでしょうか。
0482デフォルトの名無しさんNGNG
>>481
GetCursorPos()
WindowFromPoint()
ChildWindowFromPointEx()
0483481NGNG
ありがとうございます。できました。
0484328NGNG
>>328、>>377のその後
waveOutPause→waveOutReset→waveOutWriteという流れで関数を呼び出した時に
ノイズ(waveOutPauseで一時停止する寸前の音と思われる)が出る現象は
読み込んでいたドライバが悪いのではという方向に収束しています。
ちなみに自分の環境はWindows2000 ,K7S5A(Sis 7012)

とりあえず次のように変更してみました。
一時停止状態にするには、始めにボリュームを保存し無音状態に設定、Sleepで時間待ちをしたあとwaveOutPauseの呼び出しをする。
そのまま停止状態に移行するにはwaveOutResetのあとボリュームを元に戻し、
反対に一時停止を解除するにはボリュームを元に戻したあとwaveOutRestartを呼び出すと
自分の環境下でもノイズが発生することなく再生されました。

[一時停止]
DWORD Volume;
waveOutGetVolume(hWaveOut, &Volume);   // ボリュームの保存
waveOutSetVolume(hWaveOut, 0x00000000); // ボリュームを無音に設定
Sleep(30);                       // 時間待ち
waveOutPause(hWaveOut);            // 再生一時停止

[停止]
waveOutReset(hWaveOut);           // PCMの再生停止
waveOutSetVolume(hWaveOut, Volume);  // ボリュームの復帰

[一時停止解除]
waveOutSetVolume(hWaveOut, Volume);  // デバイスのボリューム復帰
waveOutRestart(hWaveOut);         // PCM一時停止の解除
0485デフォルトの名無しさんNGNG
ファイルからアイコンを抽出しようとしています。
exeやdllはLoadLibraryEx→EnumResourceNamesで列挙に成功したのですが、
iclだとLoadLibraryExのところで失敗します。
何か別な方法を使わないといけないのでしょうか?
0486デフォルトの名無しさんNGNG
おとなしくResourceHackerを使えば
0487485NGNG
アイコンそのものが目的ではなく、アイコンを抽出する手段が目的なので。
0488デフォルトの名無しさんNGNG
>>485
LOAD_LIBRARY_AS_DATAFILEは指定してるの?
0489デフォルトの名無しさんNGNG
>>485 .DLLにリネームしたら出来る?
0490485NGNG
>>488
指定してますがダメみたいです。
こんな感じですよね?
hModule=LoadLibraryEx(lpFileName,NULL,LOAD_LIBRARY_AS_DATAFILE);

>>489
変更してみましたがダメでした。
0491デフォルトの名無しさんNGNG
実はiclという拡張子なだけの、わけわかんないファイルだとか。
0492デフォルトの名無しさんNGNG
>484
それだと一時停止のPause呼び出しの後に、ボリュームを戻した方が良いんでないの?

個人的にはデバイスボリュームをユーザーの指示以外で操作するのは、
他の音を鳴らすプログラムにも影響を与えるから、あまり好ましくないと思う。
0493デフォルトの名無しさんNGNG
というか、 waveOutPause や waveOutResetは使った事がないや。
音切れしない小さなブロックに別けて、コールバック毎にwaveOutWriteで小さく送ってる。
0494デフォルトの名無しさんNGNG
しょうもないことを教えてほしいのですが、最新のPlatform SDKはどうやったら入手できるのでしょうか?
0495デフォルトの名無しさんNGNG
バッファが小さいと処理負荷に対する耐久力が気になる。
SetThreadPriority()でTHREAD_PRIORITY_TIME_CRITICALにすれば良いのか?

確かに自前ミキシングとか考えた場合なんかも、
できる限りバッファを小さくするべきなんだろうけど。


>494
ここか?
ttp://www.microsoft.com/msdownload/platformsdk/sdkupdate/
ちょっとググったらすぐ見つかったぞ。
0496デフォルトの名無しさんNGNG
http://www.google.co.jp/search?q=platform+sdk+download&ie=UTF-8&oe=UTF-8&hl=ja&lr=
0497デフォルトの名無しさんNGNG
>>494
せめて>>1に書いてあることくらいやれよ
0498デフォルトの名無しさんNGNG
>>497
Super Thanks!!
0499デフォルトの名無しさんNGNG
Longhornになると新しいWin32APIって追加されるのでしょうか?
それとも.NETのライブラリが増えるだけ?
0500デフォルトの名無しさんNGNG
>>499
されない。WinFXに移行する。
0501デフォルトの名無しさんNGNG
LonghornではWin32APIをエミュレートするんだっけ?
0502デフォルトの名無しさんNGNG
>>501
つーか、WindowsってあらゆるAPIをエミュって捉え方してるだろ
0503デフォルトの名無しさんNGNG
hEdit = ::CreateWindowW(L"EDIT", NULL, WS_CHILD | WS_VISIBLE | WS_VSCROLL | ES_LEFT | ES_MULTILINE | ES_AUTOVSCROLL, 0, 0, 400, 200, hWnd, 0, hInstance, NULL);
::SetWindowTextW(hedit, L"あいうえお\r\nかきくけこ\r\n");

UINT len;
char buf[512];

*reinterpret_cast<WORD*>(buf) = sizeof(buf);
len = ::SendMessageA(hEdit, EM_GETLINE, 0, reinterpret_cast<LPARAM>(buf));
buf[len] = '\0';
::MessageBoxA(hWnd, buf, NULL, MB_OK); // <---(1)
::MessageBoxW(hWnd, reinterpret_cast<LPCWSTR>(buf), NULL, MB_OK); // <---(2)

WCHAR wbuf[512];
*reinterpret_cast<WORD*>(wbuf) = sizeof(wbuf) / sizeof(wbuf[0]);
len = ::SendMessageW(hEdit, EM_GETLINE, 0, reinterpret_cast<LPARAM>(wbuf));
wbuf[len] = L'\0';
::MessageBoxW(hWnd, wbuf, NULL, MB_OK); // <---(3)
::MessageBoxA(hWnd, reinterpret_cast<LPCSTR>(wbuf), NULL, MB_OK); // <---(4)


W系で作成したエディットコントロールに対して、A系W系APIで最初の行の文字列を取得します。
(1)(3)は正常に表示され、(2)(4)は文字化けします。
SendMessageAではマルチバイト文字列、SendMessageWではUNICODE文字列が取得されるようですが
エディットコントロール側がそれらを判別してるのでしょうか?
それともSendMessageが文字列の変換をしているのでしょうか?
0504デフォルトの名無しさんNGNG
そういう意味では、そもそも、NT系OSは全て、Win32API はシステムコールじゃなくて、
ラッパーで実現してるとは言えるかもね。
世の中には、NTシステムコールを直に呼び出しているソフトとかあるのかな?
0505デフォルトの名無しさんNGNG
>>504
いつ互換性がなくなるか分からんからなあ・・・
よっぽどの必要がないかぎりやらんだろう
0506デフォルトの名無しさんNGNG
スレッドハンドルからそのスレッドが所有しているウィンドウハンドルを得る方法はありますか?
0507デフォルトの名無しさんNGNG
GetGUIThreadInfo()
EnumChildWindows()で列挙していったらどうか?

確認してないので責任は持たない。
0508デフォルトの名無しさんNGNG
windowsで、UNIXのシグナルの
SIGSTOP(プロセス一時停止)
SIGCONT(再開)
に相当するAPIってありますか?
自プロセスではなく他プロセスに対しての命令です。

0509デフォルトの名無しさんNGNG
>>508
プロセスの終了ならTerminateProcessでてきるけど一時停止は聞いたことないなぁ。
何故停止するのかよくわからんけど、Mutexとか使って排他制御とかじゃだめなん?
0510デフォルトの名無しさんNGNG
>506
ハンドルじゃなくてIDなら
EnumThreadWindows()とかGetWindowThreadProcessId()
とかあるけど、ダメ?

>508
シングルスレッドプロセスなら、
使ったこと無いけどSuspendThread()でどう?
0511デフォルトの名無しさんNGNG
>>508
SCM(NTサービス)から起動されたプロセスだと一時停止もあるけど。
0512デフォルトの名無しさんNGNG
>>511
それはサービスとしての機能が停止しているだけで、
プロセスが停止しているわけではないと思うんだが...。
0513デフォルトの名無しさんNGNG
>>512
SIGSTOP(プロセス一時停止)
SIGCONT(再開)

に該当するのは、

SERVICE_CONTROL_PAUSE
SERVICE_CONTROL_CONTINUE

でわ?

停止シグナルをどうするかはプロセス側の処理でそ。
StopProcess()なんてAPIがあって勝手に止められても困ると思う。
0514513NGNG
てゆうか、Win32だとEventを使うのが正解なのかも。。
0515デフォルトの名無しさんNGNG
>>513
だからSERVICE_CONTROL_PAUSEが通知されたからといって、
そのプロセスが停止されるわけじゃないんだってば。

>>508
/subsystem:consoleなヤツならGenerateConsoleCtrlEventが一番近い。
でも/subsystem:windowsやヤツには、それに相当するような一般的な仕組みはない。
0516デフォルトの名無しさんNGNG
>>515
止まるとは一言も書いてないんでつが。。
0517デフォルトの名無しさんNGNG
>>516
SIGSTOPを受けたら絶対にプロセスは一時停止しなければならないとでも
思ってるんじゃないの
0518SIGSTOPNGNG
俺が止まれといってるんだ・・・
なぜ・・・・止まらないぃぃっ!?
0519508NGNG
有益な情報ありがとうございます。
皆さんの与えてくれたキーワードで色々調べてみようと思います。

>>515
「でも/subsystem:windowsやヤツには、それに相当するような一般的な仕組みはない。 」
」
そうなんですか。
タスクスケジューラに「一定期間アイドル状態だったら実行」という項目があるので
(使ったことないけど)、その手のタスク制御APIがあるのかもと思ったのですが、残念。
0520508NGNG
皆さんのレスを「サービスならサスペンドできるけどね」って風に
読み間違えてました。

>>511
サービスから対象プロセスを起動して、自分の起動したプロセスを
制御せよ、ってことですね。ありがとう!
ってことはサービス以外から起動したものはやっぱ制御不能なのか。
0521508NGNG
>>520
と思ったらやっぱり
SERVICE_CONTROL_PAUSE はサービス自身のサスペンドだから違うのか。

0522デフォルトの名無しさんNGNG
>>521
RegisterServiceCtrlHandler()で指定したコールバックルーチンに
SERVICE_CONTROL_PAUSEが返って来るですよ。
一時停止は自分でしないといけないです。
0523デフォルトの名無しさんNGNG
>>518
漏れ(Win32)にそんなシグナル送っても止まるかーよ。 ア フ ォ 〜
0524デフォルトの名無しさんNGNG
>>523
TerminateProcess(>>523, 0)
あひゃひゃ。
0525デフォルトの名無しさんNGNG
てゆうか何で一時停止がしたいのよ?
0526デフォルトの名無しさんNGNG
まあ、外からプロセスなんぞどこで止まるかわかんね。>>524
止まるというのは、自分が関数呼んだときだろ。
そんなにうまく止まるなら、リセットしなくても良いよな。
OS自体が固まるなんて起きないよ。ぷ。
0527デフォルトの名無しさんNGNG
(A`)?
0528デフォルトの名無しさんNGNG
>>526
Win32を何だと思ってるのだろう?
0529デフォルトの名無しさんNGNG
>>528
止まる場所、とか、止まる保証全く無いんだが。
WinはリアルタイムOSジャないよ。
0530デフォルトの名無しさんNGNG
>>529
止まらない場合ってどんなとき?
0531デフォルトの名無しさんNGNG
まあ、ウインドウズメディアプレーヤーが止まるよな。
このときの止まらないときは、フォアグラウンドのタスクが止まらないとき。
Winがフォアグラウンドでファイルを整理し始めると肝心のプログラムが録画
し始める以上にCPU喰いやがってフレーム落ちするんだよな。
しょうがネーから自分で最高のレベルで動くように改造したよ。ぷ
0532デフォルトの名無しさんNGNG
start /high のことか?
0533デフォルトの名無しさんNGNG
>>532
お前馬鹿か?
自分でOSを回避しないとリアルタイムできないだろう。変なの。
0534デフォルトの名無しさんNGNG
>>531
これか? そりゃ、止まらんだろ。

REALTIME_PRIORITY_CLASS
このプロセスが、最も高い優先順位クラスを持つプロセスであることを示します。
このクラスを割り当てられたプロセスに所属するスレッドは、重要なタスクを実行する
オペレーティングシステムのプロセスを含むほかのすべてのプロセスのスレッドより
先に実行されます。少しでも長い時間実行すると、ディスクキャッシュがフラッシュ
されなくなったり、マウスが応答しなくなることがあります。
0535デフォルトの名無しさんNGNG
>>534
タスクマネジャーそのまんまだな。
お前、システムアイドルプロセスを止める方法知ってる?
そうするとCPUが少し早くなるよ。
0536デフォルトの名無しさんNGNG
>>535
TerminateProcess()すりゃええんでないの?
でも、そんなことをしたら色々不都合なことが起きそうだな。
0537デフォルトの名無しさんNGNG
ヘー、馬鹿かよ、未だに強制終了すると、なんにも起きないな。
悪かった。俺が全て悪かったよ。これで良いか?
もう、全て悪い使い方悪かったよ。済みません。
0538デフォルトの名無しさんNGNG
デバッグAPIで無理心中すりゃいいじゃん
0539デフォルトの名無しさんNGNG
GetSaveFileNameを利用してコモンダイアログを呼び出しています
ダイアログ内でフォルダを開こうとするとアクセスバイオレーションエラーが
発生するんですがこれはどうにか出来ないものなのでしょうか?

環境はWinXP、VC++6.0SP5を使っています
0540デフォルトの名無しさんNGNG
>>539は
0541デフォルトの名無しさんNGNG
DLLファイル等からリソース内のアイコンを抽出するものを作っています。
EnumResourceNamesの第一引数にそのファイルのハンドルがいるのですが、
LoadLibraryEx(Filename, NULL, LOAD_LIBRARY_AS_DATAFILE | LOAD_WITH_ALTERED_SEARCH_PATH);
とこんな感じで取得しています。
ですが、よくある実行不可能なリソースだけのDLLだとLoadLibraryExが0を返します。
こういったDLLを同じように扱うことはできるでしょうか。


0542デフォルトの名無しさんNGNG
おとなしくResourceHackerを使えば
0543デフォルトの名無しさんNGNG
>よくある実行不可能なリソースだけのDLL
って どこにあるの? リンクを教えてみて。 ホントにDLLかどうか見てみたい。
0544デフォルトの名無しさんNGNG
>>542
それでも読み込めないです…
eXeScopeだといけるんですが。

>>543
ttp://hp.vector.co.jp/authors/VA013969/
こちらのアイコン集です。
ちゃんと読み込めるアイコンビューアもありますし、上の通りeXeScopeでも読めます。
プログラムの無いDLLといった感じでしょうか…
0545デフォルトの名無しさんNGNG
DUMPBIN : warning LNK4095: "xxx.dll" は NE フォーマットの実行可能ファイルです
0546541NGNG
何となく原因が判明…
そのDLLが16bitなのでLoadLibraryが失敗してるみたいです。
これは諦めるしかないんでしょうか…
0547デフォルトの名無しさんNGNG
あてずっぽうだけどLoadLibraryExがNEだめなので、LoadLibraryだったらいけるとか?
0548デフォルトの名無しさんNGNG
おまいら! NE形式はNew Exe、つまり新EXE形式って知ってたか? これに対応してないリンカはバージョンが古いんだよ
0549デフォルトの名無しさんNGNG
>>547
LoadLibraryはLoadLibraryExのラッパーですが?
0550デフォルトの名無しさんNGNG
ウインドウに子ウインドウを載せるるときはどうやりますか?
0551デフォルトの名無しさんNGNG
>>546
16bitのEXEを使ってLoadLibrary しても EnumResourceNamesが無いからねえ
自前でやった方が速いんじゃないの?

3C番地に PE ヘッダのオフセット があり
オフセット+0x24 が16bitのリソースへの位置(オフセット相対)
オフセット+0x34 が16bitのリソースの個数
0552デフォルトの名無しさんNGNG
ListCtrlで質問。
オーナードローで描いてるんですが、列幅変えるとグリッドの線が残ってしまいします。
そこで全部書き直ししようとしてInvalidateRect(NULL)とUpdateWindow()したんですが全然症状が変わりません。
この方法じゃ駄目なんでしょうか?
0553デフォルトの名無しさんNGNG
どのタイミングでオーナードローしてる?
自分の環境ではグリッド線が残ることはないが?
0554デフォルトの名無しさんNGNG
>552
オーナードローなんだから、当然、全部自分で書き直さな。

で>425の答、知ってる人いないの?
0555552NGNG
>>553
DrawItemで描いてます。

>>554
や、だからDrawItemに�dでこさせようとしてるんですが上手く行かんのですよ。
0556デフォルトの名無しさんNGNG
case WM_DRAWITEM:
  if(wParam == IDC_LIST){
    描画処理関数((LPDRAWITEMSTRUCT)lParam);
  }

↑こんな感じってことだよね?
0557552NGNG
>>556
はいそんな感じです。

・・・と言いますか、>>425と同じ話のような気が。
列幅変更した時は、スクロールしない限りDrawItemに�dでこないぽいです。
全画面再描画イベント起こせればいいんですが・・・
0558デフォルトの名無しさんNGNG
列幅変更すればバリバリWM_DRAWITEM�dできてますが...
猫とか丸ごとコピーしてサンプル作ってみたらどうですか?
0559デフォルトの名無しさんNGNG
こんにちは

質問したいことがあります。

「.xls」ファイル内のデータを取り出したいのですが、
.xlsファイルのフォーマットがわからない為、データ解析ができません。
Win32APIには、.xlsのファイル内データを取り出すための専用ライブラリーが存在するのでしょうか?

(.xlsファイルを.csvに変換するというやり方でもかまいません。)
0560541NGNG
>>551
ありがとうございます。今丁度知りたかった部分でした。
とりあえずやってみようと思います。
0561デフォルトの名無しさんNGNG
>>559
ODBCでも使えば?
0562デフォルトの名無しさんNGNG
これは?
http://www.attain-sys.com/vc/excel/vc_excel.html
0563552NGNG
原因特定出来ました。
列の最小幅を設定するためにHDN_ENDTRACKを引っかけて、
その中で幅を再設定していたのが問題だったようです。

そこで改めて質問です。
列幅の最小値を設定するのに上記以外の方法はありませんか?
0564デフォルトの名無しさんNGNG
幅を再設定してもメッセージ戻り値をちゃんと返せば
問題なく再描画されるのでは?
0565デフォルトの名無しさんNGNG
jpegファイルをウィンドウ上に表示したいのですがdllは使いたくありません
できればソースがあるとうれしいのですが
0566デフォルトの名無しさんNGNG
libjpeg使え
0567デフォルトの名無しさんNGNG
>>565
スレ違いの気がしてこないか?
0568デフォルトの名無しさんNGNG
BITMAPV5HEADER
0569デフォルトの名無しさんNGNG
>>565
GDI+でどうぞ
0570デフォルトの名無しさんNGNG
8bppのDIBSectionを作るとき、パレット関係のデータ(領域)を
用意せずにCreateDIBSectionを呼びだして、後からSetDIBColorTable
でパレットを設定してるんですがこれって問題ないでしょうか。
変なところにアクセスしてないか心配なので...
0571デフォルトの名無しさんNGNG
ツールバーの正確な幅を知る方法はないでしょうか?
ボタンサイズから幅を得ようとすると、セパレータがある場合当然ズレがでるし。
0572552NGNG
どうも、解決しました。
ふとMFCの方を見たらRedrawItems()と言うまんまな関数が用意されていたので、HDN_ENDTRACKフック内でこれ使って対処しました。
結果的にMFCアプリとして書き直しになりましたが、まあ問題が出ているよりはマシと。
どうもお世話様でした。
0573デフォルトの名無しさんNGNG
>>565
IPicture
0574573NGNG
すまん。途中で書き込んでしまった。
サンプルはこれ↓
http://support.microsoft.com/default.aspx?scid=kb;ja;218972
0575デフォルトの名無しさんNGNG
[フォントの指定]コモンダイアログボックスで苦戦しています。
あるマシンで選んだポイントサイズをファイルに保存し、そのポイントサイズを別のマシンのダイアログでデフォルト値とする必要があります。
CHOOSEFONT::iPointSize は出力用だし、
lfHeight = -MulDiv(PointSize, GetDeviceCaps(hDC, LOGPIXELSY), 72);
で計算しようにも HDC がありません。
どうすればよいのでしょうか?
0576デフォルトの名無しさんNGNG
htmlの<table>タグのような表を表示しているソフトを見た事があるんですが、
猫でもわかるプログラミングを見ても、何を使えばできるのか分かりません。
WinAPIに表を作るクラスはあるのでしょうか?
0577デフォルトの名無しさんNGNG
http://www.kumei.ne.jp/c_lang/sdk3/sdk_221.htm
これのこと?
0578576NGNG
>>577
え〜と、<table>タグみたいな表を見たのは、DLで手に入れた全く関係ないソフトです。
WinAPIでそのような事ができるのならば使おうと思ったんですが、
そもそも、そのソフトは自前で<table>タグっぽい表を自前で描画していただけかも知れません。

お騒がせしました。
0579デフォルトの名無しさんNGNG
>>578
よくわからんのだが、table(つまりHTMLをレンダリングして)使いたいのか?
それともtable要素のような表を使いたいのかどっちだ。
全くわけがわからん。
前者であればIEコンポ使えばいいし、後者なら>>577。
当然自前で描画する方法もある。
質問するときはわかるように説明してくれ。
0580デフォルトの名無しさんNGNG
というか、質問したいことさえわかっていない模様。
0581576NGNG
>>579
説明が下手で申し訳ないです。
目的は、htmlで<table>タグを使った時のような、表を描画したいです。
以前、表を描画するクラスを作ったんですが、イマイチすっきりした設計ができなかったので、
既に用意された物があるのか聞きたかったです。
0582576NGNG
>>581の補足ですが、
表のレイアウト(特にrowspanによるセルの連結)が自由にできるので、
<table>タグを使いたいと思いました。

IEコンポで検索したら、いろいろでてきたので、じっくり勉強しようと思います。
どうも、ありがとうございました。
0583デフォルトの名無しさんNGNG
>>573
thx.
とてもグッドです。
0584デフォルトの名無しさんNGNG
リストビューにアイコンを表示したいんですが、何故かできないのです。

//リソースの内容
CONTROL "",IDC_LIST,"SysListView32",LVS_REPORT | LVS_ALIGNLEFT | WS_BORDER | WS_TABSTOP,6,25,174,120
MY_ICON ICON DISCARDABLE "my_icon.ico"

//イメージリスト作成後、リストビューに挿入
hList = GetDlgItem(hWnd, IDC_LIST);
hImage = ImageList_Create(16, 16, ILC_COLOR4, 1, 0);
ImageList_AddIcon(hImage, LoadIcon(gInst, "MY_ICON")); //gInstはNULLにしても駄目です
ListView_SetImageList(hList, hImage, LVSIL_SMALL);

//リストビューに項目挿入時
listitem.mask = LVIF_TEXT | LVIF_IMAGE | LVIF_PARAM;
listitem.pszText = FileName;
listitem.iItem = i;
listitem.iSubItem = 0;
listitem.lParam = i;
listitem.iImage = 0;
ListView_InsertItem(hList, &listitem);

わかる方、いらっしゃったら教えてください。
0585デフォルトの名無しさんNGNG
タイマーをKillTimerするときって2度KillTimerしないといけないとか
そんなような議論があったかと思いますがそうなのですか?
昔見たコードでうろおぼえですが
case WM_TIMER:
 KillTimer(XXX);
 if()
 {
  KillTimer(XXX);
 }

とかなんとかっていうコードを見たような。。
あやふやですみません。

0586デフォルトの名無しさんNGNG
>>584
まずはエラーチェックしてみたらどう?
LoadIconやImageList_AddIconが成功しているかどうかとかさ。
片っ端からエラーチェックすれば、どこで躓いてるか分かるでしょ。
0587デフォルトの名無しさんNGNG
既存のソフトをCreateProcessで起こしたのですが、[←][→]キーを送れなくて困っています。
▲ PostMessage(hWnd, WM_KEYDOWN, VK_RIGHT, 0);
アルファベットは送れています。
◎ PostMessage(hWnd, WM_KEYDOWN, 'Z', 0);
原因や対策など何か御存知の方いらっしゃいましたら、すみませんが教えてください。
0588584NGNG
>>586
if(ListView_SetImageList(hList, hImage, LVSIL_SMALL) == NULL
で引っかかっているようなので、その辺り調べてみます。どうもでした。
0589デフォルトの名無しさんNGNG
自作のアプリに他のアプリを取り込みたいのですがやり方が解りません
どうやれば出来るでしょうか?
0590デフォルトの名無しさんNGNG
>>589
CreateProcess()
0591587NGNG
>>589 「他のアプリを取り込みたいのですが」
>>590さんの速攻レスに追加。

CreateProcess() で得た PROCESS_INFORMATION を保存しておく。
起こした他アプリの窓が開いた後で EnumWindows() する。
OSが、こちらの関数 CALLBACK EnumWndProc() を呼んで来る。
呼ばれたら、引数で渡されたhWndから GetWindowThreadProcessId() でプロセスIDを得る。
保存しておいたPROCESS_INFORMATIONのプロセスIDと一致したら、それが起こした他アプリなのでhWndが判明する。
そのhWndを使って、他アプリにPostMessage()などを行う。

以上の手順となります。
しかしPostMessage()でVK_RIGHT[→]が送れなくて悩んでいるワタシ…
0592デフォルトの名無しさんNGNG
VK系統はkeyなんちゃら関数でやらんと駄目だった記憶。
大昔組んだのだが忘れた。
PostMessageやSendMessageじゃなかったのは確か。
0593デフォルトの名無しさんNGNG
以前にも聞いた気がするのですが、
spy++がやっているような、ウインドウの強調表示をさせるには、
どうすればいいのでしょうか?
0594デフォルトの名無しさんNGNG
>>592
これのことか?↓
keybd_event()
0595デフォルトの名無しさんNGNG
>>593
多分、FrameRgnを使ってごにょごにょとやってるんだと思ふ。
0596590NGNG
>>591
WaitForInputIdle()もお忘れ無く
0597デフォルトの名無しさんNGNG
「猫でもわかるプログラミング」を読破したらすっかり
オブジェクト指向でない脳になってしまいました。
ちゃんとクラス使っててWin32 APIが学べるサイトはないですかね。
0598デフォルトの名無しさんNGNG
>>593
普通のウィンドウは PatBlt で四辺塗りつぶし。
リージョン使ってるウィンドウは仮想DC に FrameRgn してから BitBlt で転送描画。
自分が作ったときはこうやった。
0599デフォルトの名無しさんNGNG
>>597
MFCとかATLのサイトでも見とけ。
APIの解説をするサイトで、いちいち使えるクラスライブラリから作るのか?
0600デフォルトの名無しさんNGNG
>>597
ウィンドウをC++のクラスでラップする方法なら↓ここが参考になるかも・・・

http://techtips.belution.com/ja/vc/0009/
0601デフォルトの名無しさんNGNG
なら素直にWTL使った方が良いのでは・・・
0602デフォルトの名無しさんNGNG
>>597
MFCかVCL使いなよ。
OOPしたいのにWin32API使うなんて矛盾してる。
0603デフォルトの名無しさんNGNG
ホントに初心者です。よろしくお願いいたします。

自作のアイコンをツールバーに表示しようと思っているのですが、
16色4bitの背景透明のBMPを作る手順がわかりません。
自分がやってる方法は
・Photoshop Elementsでアイコンの横並びの絵を描いて
・インデックスカラーで”ローカル”パレットで16色に減色
・bmp形式でWindows標準の4bitで保存
<実行結果>背景透明じゃないし、アイコンの絵がズレてる。

インデックスカラーで"システム"パレットで減色するとアイコン
の絵のズレはないんですが、8bitで背景も透けませんでした。
.rcファイルに
BM_TOOLBARBITMAP DISCARDABLE "ToolIcon.bmp"
TBBUTTONで構造体設定、CreateToolbarExでツールバーを生成してます。

いろいろ検索してみたんですが、フルカラーの画像から16色4bitの背景透明のBMP
に変換するまでの過程が説明されたものが見つかりませんでした。
ご教授ください宜しくお願いいたします。m(_ _)m
0604デフォルトの名無しさんNGNG
>>602
別に矛盾はしてない。
「作りたい」より「学びたい」であるならば代替案も要らないな。

でもまあ、OOPの基礎があればWIN32API乗っけるくらい屁でもねえだろ
脳内変換でがんばればいいじゃん、という話だな
猫のソースを自分でクラスにすりゃそれで実習までできる。
0605デフォルトの名無しさんNGNG
>>603
Edgeっつーツールが透過つきのアイコンファイルを
エクスポートしてくれるから試してみ。
0606デフォルトの名無しさんNGNG
>>605
D-Pixedもico出力フィルタ入れれば透過/複数サイズ色数格納できたりする
0607593NGNG
>>595
>>598

ありがとうございます。
試してみます。
0608603NGNG
Edgeを試してみました。背景透過エクスポートにはico形式しかありませんでした。
自分はBitMap形式が欲しかったのでちょっと違ったようです。
(※ただ、おかげさまで実行ファイル(exe)のアイコンは見事透過されるようになりました。)

「4bit16色のBitMap形式で背景透過する方法」を、もう一寸詳しいやり方を
ご教授くださいますでしょうか。
度々申し訳ございませんが宜しくお願いいたしますm(_ _)mm(_ _)m
0609デフォルトの名無しさんNGNG
OOPやりたいならさっさとC♯/.NETに移行するって手もあるぞ。
0610デフォルトの名無しさんNGNG
>>608
別途α画像を用意する

パレットが化けてカラーキーじゃ抜けないってことでそ?
0611デフォルトの名無しさんNGNG
.Netで作ったアプリは禿げしく重く感じるのは俺だけ?
ネイティブコードにはまだまだ到底かなわないとオモータよ。
0612デフォルトの名無しさんNGNG
.NetよりまだVBのEXEの方がマシよーん。
0613605NGNG
>>603
すまん。最初の方だけ読んでicoだと思い込んでた。
ツールバーあんまり詳しくないんであれだが、背景透明というのは
ボタンの表面色に合わせるってことだろうか?
っていうことであればとりあえず↓なんかを参照。
http://yokohama.cool.ne.jp/chokuto/urawaza/toolbar1.html
0614デフォルトの名無しさんNGNG
>>603
BMPは画像形式として、透過をサポートしてないよ。
ツールバーについてはよく知らないが、何か「透過色」があるんじゃないのか?
「この色を設定してたら透けるようになる」みたいな。
0615デフォルトの名無しさんNGNG
>>590-591
亀レスですがありがとうございます
やってみます
0616デフォルトの名無しさんNGNG
>603
ツールバー作ったこと無いけど、
LoadImageでフラグをごにょごにょ指定して読み込めばいいんじゃないの?
0617デフォルトの名無しさんNGNG
>>611
MSが本気で.NETのライブラリをネイティブなものにするのなら、Longhornにおける
W32APIとの速度優位性は逆転するはず。ただ、そうするとWindowsを1/3ほど
再設計/再実装する必要が出てくるんで、エンバグは必至(いくら.NET Frameworkを
叩き台としてテストしているとはいえ)。なので、将来5年位はW32APIで行けると思ってる。


とスレ違いネタでした。
0618デフォルトの名無しさんNGNG
WIN32 APIで大体の事ができるようになってきました。(C言語)
(Windows標準で付いてくるペイントブラシが自作できる位)
「猫でもわかるプログラミング」も大体、理解しました。
C++は、DOS等で練習問題程度はできるようになりました。
他にできる言語はVB、Perl位です。MFCはやってません。

この状態で次に勉強するのに最適な方向は何でしょうか?
MFC?ATL?WTL?VCL?GTK?.Net?
それとも>>597みたいに自作でクラスライブラリ作成??
0619デフォルトの名無しさんNGNG
↓次にお前は「大体の事ができるようになってきたなんてヤツに限って(」と言う。
0620デフォルトの名無しさんNGNG
>>618
>この状態で次に勉強するのに最適な方向は何でしょうか?

マジレス:UNIX
0621デフォルトの名無しさんNGNG
勉強ばっかしてないでとっとと実用的なアプリを書け。
0622デフォルトの名無しさんNGNG
>>618
なにがしたいの?何が作りたいの?
0623デフォルトの名無しさんNGNG
>>618
それだけできれば食っていける
0624デフォルトの名無しさんNGNG
>>618は半年ROMってからで直せ
次はネタ振りできるようになってから書き込めよ
0625618NGNG
書き込んで風呂に入って出てきたら
レスがいっぱい付いててビックリしました。

>>620
実はUNIXも興味はあるんです。やっぱり
ネットワーク系のプログラムだとUNIXの方が
勉強の環境としては良いんですかね?

>>621
実用的なアプリですか・・・。
作った事はあるのですが
ここで晒すと自分がバレてしまうので・・・。

>>622
「何が作りたい」というのは色々ありますが
作る上での環境が現在はC言語(Not C++)で、
WIN32 APIゴリ押しという感じがあるので
もうちょっと再利用性とかライブラリとか
使いやすい環境(言語,フレームワーク等)が
無いかなー、と思ってるところです。

>>632
ありがとうございます。実はコレで食っています。
でも、Windowsプログラムのみで食ってる訳では
無いです。本職はwebやflashやdirector等です。
それらで足りない部分をC等で補ってます。

>>624
すみません。でも、ネタでは無いんです。
ここのROMは3年くらいやってます。
0626デフォルトの名無しさんNGNG
>>618
いまさら先の短いVC+MFC覚えるのもしんどいしねぇ。王道ではあるけど。
.NETいくならC#だしWin32に残るならVB、Delphi、C++Builderあたりが無難でないの。
0627デフォルトの名無しさんNGNG
C++なら再利用できるというのは幻想
0628デフォルトの名無しさんNGNG
どっちみち再利用なんてしないんだから
0629デフォルトの名無しさんNGNG
>>616
LR_LOADTRANSPARENT でよいのでは。
0630デフォルトの名無しさんNGNG
VC6を使ってます。
dll内のグローバル変数を共有メモリにするため
#pragma data_segで、変数を確保しています。

そこで質問です。共有のために、data_seg内の変数は初期化が必須らしいのですが、
配列の場合はどうすれば良いのでしょうか。

今は例えば次のようにやっていますが、配列の長さを変えるたびに一苦労。

char name[20]={
 '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0',
 '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0', '\0',
};

何か良い方法がありましたら、ご教授下さい。
0631デフォルトの名無しさんNGNG
char name[20] = {0};
0632( ´,_ゝ`)NGNG
>>614
しかしながら、XPから32bitのBMPをアルファチャネル付きとして
扱えるのであった。

アルファチャネル付きのアイコンやツールバーはここが参考になる。
http://www.microsoft.com/japan/msdn/windows/windowsxp/winxpicons.asp#winxpicons_toolbar
0633デフォルトの名無しさんNGNG
そりゃ話が違うだろ・・・>αと透過
0634デフォルトの名無しさんNGNG
そうか?
0635デフォルトの名無しさんNGNG
>>633 ( ´,_ゝ`)プッ・・
0636デフォルトの名無しさんNGNG
>>597
亀レスすまそ

Win32 APIは立派にオブジェクト指向だぞ
第1引数がハンドルになってる関数いっぱいあったろ
概してOSとのやり取りはオブジェクト指向の権化のようなものだ

オブジェクト指向でない部分というとWinMainに長々と書きまくることだとか
ハンドルをポインタにキャストする場面だとかだ

決してclassという予約語を使うことがオブジェクト指向なわけではない
そこを間違えてる限りオブジェクト指向に関して進歩はないぞ
0637デフォルトの名無しさんNGNG
Cでもオブジェクト指向厨久しぶりに見かけたな。
0638デフォルトの名無しさんNGNG
>>636
いい事言うね。貰いますよ(w

ハンドルオブジェクト削除関数 CloseHandle(HANDLE handle)
とか見てると、つくづくオブジェクト指向だなって思う。
どういう種類のハンドルなのか、実行時にしか判らないのにエライと思うよ、WIN32API。

そんなわけで、オブジェクト指向を無意味に拒絶するヤシは
スルーする方向でヨロ。
0639デフォルトの名無しさんNGNG
そうなると fopen() なんかもオブジェクト指向になるが。。。
FILE *fp なんかメンバー変数とみなせるしな。丸見えだけど。
0640603NGNG
遅くなりました。みなさんレスありがとうございます。

みなさんのアドバイスを見て、初心者なんで自分の実力以上に
大変で、どれも上手くいかなかったり試せてなかったりです(汗)。
そんで、ちょっとオープンソースのプログラムを参考にさせていただこうと思い、
以下のSotaさんのサイトのソース(ttPageやFFFTP等)を眺めたところ、

ttp://www2.biglobe.ne.jp/~sota/index.html

ソースにLR_LOADTRANSPARENTやバーの表面色に背景色を合わせるような処理が
見あたらないんで半分お手上げ状態です。
ツールバーのビットマップソースを見てみるとRGB(192.192.192)で
描かれていて「これが透過色かな?」とアイコンを作ってみたんですが、
インデックスカラー減色のシステム(Windows)カラーにRGB(192.192.192)の色が無く透過せず。
で、他の減色方法で試すと、透けました!けどボタンの枠と絵がズレちゃってる_| ̄|○
というわけで透過色と減色方法についてちょっと調べています。
詳しい方がいたら&Sotaさんの方法が判る方、ご教授くださいm(_ _)m
初歩的な事で申し訳御座いません。長文失礼いたしました。
0641デフォルトの名無しさんNGNG
>>640
ソース晒せ
0642デフォルトの名無しさんNGNG
>>639
思うに >>636 や >>638 は
「抽象化」と「オブジェクト指向」がごっちゃになっているんではないかと。
0643デフォルトの名無しさんNGNG
>>640
詳しくないけども一応。CreateMappedBitmap とか調べてみそ。
RGB(192.192.192) は COLOR_BTNFACE に置き換えられるはず。
枠と絵がズレるはよくわかんない。
0644デフォルトの名無しさんNGNG
>>639
>そうなると fopen() なんかもオブジェクト指向になるが。。。

ある意味、正しいと思うよ。
0645643NGNG
ゴメン。CreateMappedBitmap は無視してけろ。
なんか、別の関数の説明にあったような気がする。
ダメだ。忘れた。自力でがんばれ。
0646デフォルトの名無しさんNGNG
ツリービューでアイテムをクリックしたらNM_CLICKが来るけど、
ダブルクリックしたらNM_CLICKが来た後にNM_DBLCLKが来ちゃいます。
NM_CLICKが来た時点だとクリックかダブルクリックか分からないので
困るんですけど、どうしたらいいでしょうか??
0647デフォルトの名無しさんNGNG
>>644
俺もそう思う。
例えば手元の FreeBSD 4.7R + gcc 2.95.4 の stdio.h みて見ると...

typedef struct __sFILE {
 unsigned char *_p; /* current position in (some) buffer */
 int _r; /* read space left for getc() */
 int _w; /* write space left for putc() */
(... 中略 ...)
 /* operations */
 void *_cookie; /* cookie passed to io functions */
 int (*_close) __P((void *));
 int (*_read) __P((void *, char *, int));
 fpos_t (*_seek) __P((void *, fpos_t, int));
 int (*_write) __P((void *, const char *, int));
(... 中略 ...)
} FILE;

となってて、C++ の仮想関数をポインタで実装している。
C で抽象化を実現する時の常套手段。
0648デフォルトの名無しさんNGNG
ま、初期の C++ はプリプロセッサで C のコードを吐いてたわけだから。
0649デフォルトの名無しさんNGNG
>>646
ttp://techtips.belution.com/ja/vc/0040/
0650デフォルトの名無しさんNGNG
質問なのですが、
ダイアログじゃない、CreateWindowで作った窓の上にあるコントロールを
Tabで移動したいので、
親窓にWS_EX_CONTROLPARENT、コントロールにWS_TABSTOP
を指定してCreateしたのですが、
これだけでは全く反応してくれません。

他にどういった指定が必要なのでしょうか?
0651デフォルトの名無しさんNGNG
IsDialogMessage
0652デフォルトの名無しさんNGNG
>>651
650じゃないけど、
タブで親子関係のコントロール間も移動させたいとなると、
IsDialogMessageに渡すだけじゃ無理っぽくない?
フレーム無しのダイアログ貼り付けた時とか、
プロパティとかのタブコントロール周りを真似る時とか。
昔うまくタブ移動できなかったよ。
メッセージちゃんと処理してなかっただけかもしれないけど。
0653デフォルトの名無しさんNGNG
ダイアログは張り付けられたコントロールをサブクラス化してるんじゃなかったか?
0654デフォルトの名無しさんNGNG
サービスからHTTPでWebサーバに接続したいのですが
サービスでWinInetは使用すべきでないようですし、
WinHTTPはWindows 2000以降でもサービスパック当てないと
使えないようですし、何か他の簡単な方法がありませんか?
0655デフォルトの名無しさんNGNG
winsockでだめなの?
0656デフォルトの名無しさんNGNG
>>655
できればもっと簡単なAPIがないものかと
0657デフォルトの名無しさんNGNG
libwww
APIでもなんでもないが。
0658デフォルトの名無しさんNGNG
> サービスでWinInetは使用すべきでないようですし

マジ?
ソースがあれば欲しい
0659650NGNG
>651
サンクス、出来ました。
0660デフォルトの名無しさんNGNG
>>657
機能的には良さそうですが使うまでが簡単では
なさそうですねえ...(私の頭には)

>>658
Platform SDKのWinInetのトップページに書いてありました。
WinHTTPが出たから新しいほう使え、くらいのことかもしれない
と思ってましたが、今検索したら
http://support.microsoft.com/default.aspx?scid=kb;ja;238425
が引っかかりました。少し古いですけど。
0661デフォルトの名無しさんNGNG
>>660
おおさんくす
winhttpの存在を知らなかった・・・
ところでコレ、XP以降専用なんですかね。
0662デフォルトの名無しさんNGNG
2000とXPも中身はだいぶ違うからな・・・
新機能に絡んだ開発は嫌気がさす
0663デフォルトの名無しさんNGNG
>>662
俺は楽しいけど。てか、ずーと同じOSで仕事するってのは
考えただけでアクビが出そう。
0664デフォルトの名無しさんNGNG
>>661
WinHTTP 5.0はXPではおそらく標準で入っていて、
2000やNT4には追加コンポーネントだったみたいです。

WinHTTP 5.1はWindows 2003では標準、
Windows 2000 SP3やXP SP1でもインストールされるようです。
5.1が出たので、5.0の追加コンポーネントはもう配布していません。
0665デフォルトの名無しさんNGNG
インプットボックスみたいなコモンダイアログボックスはありますか?
0666デフォルトの名無しさんNGNG
GetOpenFileNameをフックして、ドライブリストとファイル一覧と
タイプ一覧とプレースバーを消して使うといいよ。
0667デフォルトの名無しさんNGNG
すげー発想だな(w
0668デフォルトの名無しさんNGNG
俺はメッセージボックスをフックとサブクラス化使って
>>665がやりたいようなことやってるぞ。
こんなアフォなことするくらいなら大人しくダイアログ作った方が早いけど。
0669デフォルトの名無しさんNGNG
実際にやるかどうかはともかく、
そういう柔軟な発想ができるってことが大事なのかもね
0670デフォルトの名無しさんNGNG
たしかに…
ココまで無理やり代用するのはすごい
0671デフォルトの名無しさんNGNG
Windowsでは、実行時にメモリ上のバイナリイメージからライブラリを動的にロードする方法はありますか?
LoadLibrary関数はディスク上のDLLファイルからの入力しかサポートしていないようですが、
同じようなことをメモリ上に展開したイメージから行いたいのです。
0672デフォルトの名無しさんNGNG
メモリ上にあるなら、直接呼べよ。 何の障害があるんだ?
0673デフォルトの名無しさんNGNG
データ領域のコードって実行できるんだっけ?
0674デフォルトの名無しさんNGNG
>>673
困った事にな。 それが禁止出来るならバッファオーバランなんて相当なレベルでまで防止出来るだろ。
0675デフォルトの名無しさんNGNG
そういやそうか。
仮想メモリ上のコード領域の自己書き換えが駄目なんだっけ?
0676671NGNG
説明不足ですみません。
メモリ上にはあくまでPEフォーマットなどのバイナリデータとして存在しているだけで、
関数やリソースのアドレスが正しくマッピングされているわけではありません。
DLLをファイルからロードしてメモリにマッピングするのと同様に、
メモリ上のデータからライブラリをロードして使いたいということです。
0677デフォルトの名無しさんNGNG
>>676 いったんファイルに書き出してしまうのが一番楽だが。
0678デフォルトの名無しさんNGNG
ちゅーても、ロード時にリロケートされた結果のイメージがそんなに変わったりしないよな
今の32bit環境用に昔のCOMモデルのようなシンプルイメージを復活してもよさそうな気もする
0679デフォルトの名無しさんNGNG
http://www.microsoft.com/japan/msdn/windows/windowsxp/securityinxpsp2.asp
XPのSP2からはスタックとヒープ領域のコードは実行不可になるみたいだよ。
0680デフォルトの名無しさんNGNG
また遅くなるのか
0681デフォルトの名無しさんNGNG
>>676
「可能」か「不可能」かという問いに対しては、
藻前のスキルが糞なら「不可能」という答えになるし、
そこそこデキるヤツなら「可能」という答えになる。

藻前がそこそこデキるヤツと仮定して聞くが、
メモリにあるそのイメージは、ページ境界とセクション境界は
どちらも4KBでリンクされたヤツなんだろうな。
そうでなけりゃあ、無理。っつーか、面倒。アライメントやりなおせ。

次に、もしリロケートされてないんなら、PEの仕様書みて自分でまずリロケートしろ。

イメージがリロケートできたら、多分、GetProcAddressできんじゃねえかな?
っつーか、自前でリロケートできりゃあ、GetProcAddressなんざ使わなくたって
エクスポートテーブル読めるわけだが。
それができれば、自前でヘルパルーチン書いて遅延ロードでもして使え。

ただし、初期化ルーチンは明示的に呼び出してやらなきゃいけない。
それにいくつかのAPI(GetModuleHandleとかGetModuleFileNameとか)は、
正しい結果が得られない場合があるので、そのモジュールの
IATをフックして、つじつまを合わせてやらないといけない。

...なんせ、OSはそのイメージをDLLとしてロードした覚えがないからな。
.tlsセクションなんて切られてた日にゃあ、多分、あきらめたほうがいい。

もしここに書いたことがワケワカメなら、すまんが逝ってよし。
0682デフォルトの名無しさんNGNG
676じゃないが、んな無茶するのか。自前展開なんて・・・
0683デフォルトの名無しさんNGNG
ネット越しに落としてきた怪しげなDLLを実行するのかね。
0684デフォルトの名無しさんNGNG
>>679
今のところ対応してるのはK8ファミリだけだけどね。
0685デフォルトの名無しさんNGNG
UPXのソースでも読んでみるとか
0686デフォルトの名無しさんNGNG
GPLに汚染される気があるならupxでも読んでみるとかな。
0687デフォルトの名無しさんNGNG
>> 679
>> 684

なあ、VC6 の atlbase.h の中で定義している
CWndProcThunk のロジックってこの仕様変更に引っかからないのかな?
思いっきり、構造体内部にコード書いてそこにジャンプさせてるんだが…

VC.NET の atlbase.h はこっそりと HeapAlloc に書き換えてるようだが。
0688デフォルトの名無しさんNGNG
互換性モードで回避、かのう。
0689684NGNG
>>687
ATLはよくわからないけど、VirtualAllocかVirtualProtectでPAGE_EXECUTE系の属性を付けてなければ、その手のコードは全部引っかかります。
だから、HeapAllocでもひっかかります。
ただ、>>679の参照先によるとヒープ領域は"規定では実行不可"なのでオプションで実行可に変更可にできるんだと思う。
自動変数に確保だと、たぶんどうしようもないんじゃないかな。
0690デフォルトの名無しさん :NGNG
デスクトップをムービーキャプチャするソフトを
作成中なのですが、
メディアプレイヤーなどで再生している 画像、ムービー
の部分だけキャプチャできません(透けて表示されてしまいます)

うまくおこなう方法はありませんでしょうか?
著作権がからむのでキャプチャできないようなんらかのプロテクトが
かかっているのでしょうか?もしかしてこれが電子透かしという技術?

0691デフォルトの名無しさんNGNG
>>690
くすくす
0692デフォルトの名無しさんNGNG
「オーバーレイ」でググってみましょう
0693デフォルトの名無しさんNGNG
>>689
やっぱ、HeapAlloc でもダメですか。

ATL ってWindows に登録したWindowプロシージャからクラスの本当のWindowプロシージャ
を呼び出す間に HWND を this ポインタに差し替えるちょっとしたトリックを
上記の CWndProcThunk ってので実現してます。結構すっきりしていてオーバーヘッドも
少ないので、毎回クラスとウィンドウのマップを引いてる
MFC の実装より気に入ってたんだが。
ATL/WTL で書いたコードまとめてあぼーんですか…

いや ATL を使わない時でもウィンドウプロシージャとクラスを結びつける
便利で高速な方法として重宝してたんだけどね。
たった、10バイト強のトリックコードを
VirtualAlloc で確保すると言うのもなー
0694デフォルトの名無しさん :NGNG
そうだったのか・・
勝手に”電子透かし”ってキーワードに結びつけてた・・ハズスィ。

■screen overlay

 Windowsの表示に、ビデオ出力を重ねて表示させること。
ビデオ出力を表示させるウィンドウをマゼンタなどの特定の色にしておき、
その部分にビデオ信号をアナログ的に合成し表示させる方法。

ということは、ムービーの画像をビデオカードで合成してるから、
デバイスコンテキスト経由だとキャプチャは不可能ってことか。

なにか良い手はないかな?
0695デフォルトの名無しさんNGNG
ttp://zidney.define.jp/programing/sample/bind/
これか
0696デフォルトの名無しさんNGNG
> 自動変数に確保だと、たぶんどうしようもないんじゃないかな。
VirtualProtectで実行属性を付けてやるのも駄目なの?
0697デフォルトの名無しさんNGNG
>>693
WTLスレで結論が出ている。
全く問題ない。
0698デフォルトの名無しさんNGNG
ATLをバージョンアップして再コンパイルすればWTLも動くという結論のようだが全く問題ない?
0699デフォルトの名無しさんNGNG
とMicrosoftの中の人は主張してますな
0700デフォルトの名無しさんNGNG
>>696
どうしようもないってのは、すでにexeになってる物のことです。
>>698の言うようにコンパイルし直せば問題ないです。
0701デフォルトの名無しさんNGNG
>>694
CodeProjectにサンプルがあったような気がしたよ。ちゃんと見てないけど。
0702デフォルトの名無しさんNGNG
過去にATLで作ったexeがSP2で動かなかったら嬉しいな。
SP2対応と称して、ただリビルド。それだけで客から金が取れて (゚д゚)ウマー
0703デフォルトの名無しさんNGNG
それ、ビジネスモデル特許とらなきゃ
0704デフォルトの名無しさんNGNG
無理、VBで多用され尽したビジネスモデルだろ
0705デフォルトの名無しさんNGNG
ディスプレイの省電力モードの制御について質問なんですが
省電力モードにするには
PostMessage(HWND_BROADCAST, WM_SYSCOMMAND, SC_MONITORPOWER, TRUE);
とすれば良いのはわかったのですが
省電力モードから復帰したときを知るにはどうしたらいいのでしょうか?

検索して
復帰したときSC_MONITORPOWER のLPARAMの内容が-1のイベントがくる
と書いてあるサイトを見つけたのですが、そのようなイベントは実際には発生しないので
何か良い方法を知っている人いませんか?
0706xNGNG
>>705
WM_POWERBROADCAST
じゃないの?
0707デフォルトの名無しさんNGNG
>>679
うわ、
おれが納品したやつまるごと動かなくなるな(w
ヒープ上のコードの実行って、シェアウェアの
プロテクト用途とかでも極自然なことだと思うけど。
きついなこれ。
0708デフォルトの名無しさんNGNG
NamedPipeやRPCでローカルマシン上からの接続だけを
許可するにはどうしたらいいんですか?
0709デフォルトの名無しさんNGNG
ポートをふさぐ。
0710デフォルトの名無しさんNGNG
特定のアプリのウィンドウプロシージャを取得する方法を教えてください。
GetWindowLong&GWL_WNDPROCでやると「アクセスが拒否されました」ってエラーがでちゃいます。
0711デフォルトの名無しさんNGNG
c言語のsetenvと同様のことができるapiありますか?
vbで使いたいのですが・・・
0712デフォルトの名無しさんNGNG
>>711
SetEnvironmentVariable
0713デフォルトの名無しさんNGNG
>>710
SetWindowsHookExでがんがれ
0714デフォルトの名無しさんNGNG
ヒープやスタック上のコード実行禁止になるのは、Athlon64 とかのそ
ういう機能を持ったプロセッサだけじゃないの?

0715デフォルトの名無しさんNGNG
>>712 thx.
0716デフォルトの名無しさんNGNG
>>714
機器の指定までできるならいいけど
0717デフォルトの名無しさんNGNG
タブ付きのダイアログなんか作るとき、VCのリソースエディタだと
非常に面倒で参ってます。何か便利な方法や、フリーのリソースエディタで
タブ周りが洗練されているものなど、ございましたら紹介して頂けないでしょうか

今はタブ毎に別のダイアログとして作成 > 最後にテキストでリソースを開いて統合
という、泥臭い方法やっています
0718デフォルトの名無しさんNGNG
>>717
他人が読んでわかるように書け。
0719デフォルトの名無しさんNGNG
復旧記念age
0720(ログ差分カキコ)NGNG
719 名前: デフォルトの名無しさん [sage] 投稿日: 04/03/25 12:37
>>717
DelphiでTPageControl
720 名前: デフォルトの名無しさん [sage] 投稿日: 04/03/25 13:14
>>718
失礼。今までは例えば
タブAが押された>コモンコントロールのAを表示/Bを非表示に
タブBが押された>コモンコントロールのBを表示/Aを非表示に

としていたのですが、AとBが重なっていたりすると
リソース作りが非常に面倒で参っていたという話でした。

>>719
ありがとうございます。TPageControlについて調べていたら
どうやらタブが押された場合は、TPageControlの様に
ダイアログ毎交換してしまう方法が一般的なんですね。

Win32APIで、これをどうやって実現すればいいのか、もう少し調べてみます。
0721(ログ差分カキコ)NGNG
> 最後にテキストでリソースを開いて統合
を自分でツール作ればいいんじゃないかな?

あるいは、DelphiのIDEでTPageControlで作った .DPRから変換作成したらどう?
0722(ログ差分)NGNG
MFCのプロパティシート/ページも子ダイアログ切り替え式だよ。
0723(ログ差分)NGNG
ごめん .DPR はプロジェクトで .DFM だ。 テキストで保存出来るから、変換は簡単

そういや昔そんなツールがあったような
0724(ログ差分)NGNG
MSDNのタブコントロールの章に出てるね<ダイアログ切り換え
0725(ログ差分)NGNG
プロパティシートコントロールを使えばいいと思うのだが、
だれも指摘しないのか?
0726(ログ差分)NGNG
いいんじゃないの。タブだって間違いじゃないんだし。タブの方法を質問してんだし。
0727(ログ差分)NGNG
プロセスハンドルを取得後ReadProcessMemoryで指定したメモリアドレスの情報を読み込むことが出来ますが
その逆で特定のプロセスの欲しい情報が格納されているメモリアドレスを調べる方法がありましたら教えてください。
0728(ログ差分)NGNG
メモリエディタ作って「検索」したいってこと?
DLL潜り込ませて検索させるか
ReadProcessMemoryで丸ごと読み込んで検索するしかない
0729727 (ログ差分)NGNG
そうですね早い話がメモリエディタですね
とりあえずReadProcessMemoryで0〜検索する方法でやってみたいと思います
0730(ログ差分)NGNG
プロセスが持っているファイルハンドルを取得するAPIってありますか?
ハンドルテーブルというところに格納されているってのはわかったんですけど
APIが見当たらないです。
0731(ログ差分)NGNG
エクスプローラでファイルを右DnDするとでてくるメニューはどうやったら作れますか?
0732(ログ差分)NGNG
>>731
IShellFolder::GetUIObjectOf(IID_IContextMenu)
0733(ログ差分)NGNG
win9x環境で一度ロードされてしまった16bitDLLをアンロードするにはどうやればいいの?
0734(ログ差分)NGNG
Q: あるプログラムが使用しているWIN32APIやDLL内ファンクションの一覧をリストアップするような
ツールはないでしょうか? 検索してもノイズ情報しか見つけられませんでした...とほほ
0735(ログ差分)NGNG
良からぬ事を企んでいそうなので教えてあげない
0736734 (ログ差分)NGNG
>>735
よからぬ事を考えて、それを実現するぐらいの能力があるなら、2ちゃんで質問してないかと...

漏れはWindowsプログラミングの勉強をはじめたばかりの初心者で、どんなサービスを使えば
いいのかよくわかってない。だから他のプログラムが使っているサービスを参考にして勉強を
すすめていこうと思ってるわけなのです。
0737732NGNG
>>731
IShellFolder::GetUIObjectOf(IID_IDropTarget) し、
これで取得した IDropTarget に対して IDropTarget::Drop() の間違いでした。
0738(ログ差分)NGNG
737 名前: デフォルトの名無しさん [sage] 投稿日: 04/03/26 11:25
>>736
サービスってAPIのことのつもりだよな。

そのツールを使って
仮に使ってるAPIがずらずらっと出てきたとして、
仮にその引数や返却値までわかったとして、
藻前様はそれだけで使い方がわかるのですか。たいしたもんだ。

738 名前: デフォルトの名無しさん [sage] 投稿日: 04/03/26 11:27
そーゆーのはバイナリから判断するもんでもないだろ。
サンプルやソース公開してるフリーウェアのコード読んで勉強しろ。
0739デフォルトの名無しさんNGNG
質問です。あるウィンドウが、自分がデスクトップ上で
一番手前であるかどうか知るのはどうしたらいいんでしょうか?
GetActiveWindow APIで判断できるかと思ったんですが、
これで取得できるのは自分のプログラム内のアクティブウィンドウ
だけでした。よろしくお願いします。
0740デフォルトの名無しさんNGNG
>>736
逆汗ツールでapiのインポートテーブルを書き出す物もあるよ。
0741デフォルトの名無しさんNGNG
>>739
GetForegroundWindow()
0742デフォルトの名無しさんNGNG
Winspector - Ultimate Programmers Window Spy Utility
ttp://www.windows-spy.com/

別のツールだがこれも使えそう。
フリーのSpy++みたいなもの。
0743(ログ差分)NGNG
739 名前: x [sage] 投稿日: 04/03/26 11:30
 このソフトと同じようなことをやりたいけど、どうやっていいのかわからない。
 MSDNもあるけど、検索しようにもキーワードが浮かばない。
 使ってるAPIでもわかれば、それを手がかりにMSDNを読み始められるのに。

 ってことでしょ。気持ちはわかるよ。


740 名前: デフォルトの名無しさん [sage] 投稿日: 04/03/26 11:38
 Dependency Walker
0744739NGNG
>>741
無事できました。ありがとうございます。

>>743
? 大丈夫ですか?
0745デフォルトの名無しさんNGNG
>>744
飛んだログの補完だろ
0746デフォルトの名無しさんNGNG
>>742
これ、めちゃくちゃ重いんだけど、どうにかならないもんなんだろうか?
0747739NGNG
>>745
なるほどw
ハンドル見落としてました。失礼しますた。
0748デフォルトの名無しさんNGNG
MDIの子ウィンドウをアクティブにしないで生成するには
どうしたらいいんでしょうか?
WM_CREATE内でShowWindow(SW_HIDE)しても、WM_MDIACTIVATEが呼ばれて
アクティブになってしまうんですが。
0749デフォルトの名無しさんNGNG
WM_CREATEで適当にフラグ立てて、WM_MDIACTIVATEでフラグを見てメッセージを殺す
というのでは駄目かな
0750デフォルトの名無しさんNGNG
すみません、質問です。

システムが各種コントロールで使用しているパーツのイメージ
(チェックボックスやラジオボタン等のビットマップ)を
利用する方法があれば教えてください。

少々複雑なカスタムコントロールを作成しようとしているのですが、
自前でビットマップを用意するより、システムのものが流用可能であれば
そっちを利用した方がいいと思いまして。
0751750NGNG
すみません。質問したのにいつもの癖でsageてしまいますた。
0752sageNGNG
>>749
WM_MDIACTIVATEはactivateされるウィンドウとdeactivateされるウィンドウの
二つに来るので、両方からそのフラグをチェックしなくちゃいけなくって
ちょっとめんどいなぁと思ったんですよね。
そもそもWM_MDIACTIVATEを発生させないような作成方法はないものかと。
0753デフォルトの名無しさんNGNG
>>750
クラシックスタイルならば、DrawFrameControl() で描ける。
ただし、背景を透過させるのに多少の工夫が必要。
XPスタイルならば、テーマ系のAPIを使えば良いんじゃないかな。
0754750NGNG
>>753
おおっ、こんなAPIがあったんですね!!
試してみます。どうもありがとうございましたー。
0755デフォルトの名無しさんNGNG
>>737
どもありがとうございます、ちょっと難しそうですがやってみます。
ドロップターゲットってIShellFolderから取得できるんですね。
0756730NGNG
すぐ下で似たような質問が出たため私の質問がスルーされちゃってますね(汗)
鯖が死んでる間に自分でも調べてみたんですが、どうもよくわかりません。
NtQueryInformationProcessでPEBを取ってくればいいのかとも思ったんですが、
PEBにはハンドルテーブルに関する情報がないようです。
どなたかご存知の方がいたらご教示ください。
0757デフォルトの名無しさんNGNG
>>679からのネタだけど、実際にSP2+AMD64だと
実行保護機能を切らないとDivXの再生ができないらしい。
0758デフォルトの名無しさんNGNG
AMD64は買いじゃないってことで良いですか?
0759デフォルトの名無しさんNGNG
DivXを再生しようとするとコーデック探しに行ってしまう。
Configuration Utilityを使うと↓

ttp://www.border.jp/uploader/img/2253.jpg
0760デフォルトの名無しさんNGNG
XviDだとどーなんだろか?
DivXもデコード出来た気が。
0761デフォルトの名無しさんNGNG
WTLのサンクも本当に動くのだろうか?
0762デフォルトの名無しさんNGNG
コンソール アプリケーションの標準出力の内容を
エディット ボックスなどに出力する方法がわかりません。
検索してもそれらしいものが見つからなくて…。
開発環境の [出力] ウィンドウみたいなことをしたいのです。
どなたかご存知でしたらお教え願います。
0763デフォルトの名無しさんNGNG
パイプを使え
0764762NGNG
即レスありがとうございます。
「パイプ」をキーワードに追加して検索したらなんとなく
それらしいのが見つかったので、いろいろ試してみます。
0765デフォルトの名無しさんNGNG
Heap32FirstやHeap32Nextでヒープブロックの情報を取得したいのですが
プロセスによって取得できるものと出来ないものがあるのですが
どのような原因があるのかわかる方いましたらおねがいします。
0766デフォルトの名無しさんNGNG
ICopyHookというインターフェイスについて質問です。

これってエクスプローラのコピー等の動作を
フックできるものだと思ってたのですが、
登録してもそんな動作はしてくれません。
これの用途って本当は何なのでしょうか。
あるいは私のコードがおかしいかも知れませんが
ご存知の方いらっしゃったらご教示願います。
0767デフォルトの名無しさんNGNG
>>766
その書き方だと、どういう動作を期待していて(フックって実際に何をしたいの?)、
結局どういう動作になったのかもわからんぞ。
SDK Reference を見たところでは、コピー等の動作の許可、不許可を出すだけみたいだが。
とりあえず、レジストリの正しいところに登録してる?
ttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/shellcc/platform/shell/reference/ifaces/icopyhook/CopyCallback.asp
0768デフォルトの名無しさんNGNG
http://pc5.2ch.net/test/read.cgi/win/1080045140/784
おいおいDelphiのTLanguagesが>>679に引っかかるらしいぞ
0769デフォルトの名無しさんNGNG
BCCでウィンドウズアプリ作ってるんですけど、みなさんに質問。

ウィンドウ作って、そこにコントロール(とくにチェックボックス)くっつけると、
ウィンドウの背景色は白なのに、コントロールが表示されている座標の四角形の中の背景色は中途半端な灰色とかになりますよね?
見栄えが悪いのでどうにかしたいのですが、みなさんはどうやって解決してますか?
0770デフォルトの名無しさんNGNG
WM_CTLCOLORSTATIC
0771デフォルトの名無しさんNGNG
背景色をGetSysColor で取得した色にあわせるとか
WM_CTLCOLORBTNに応答してブラシを返してやるとか
0772デフォルトの名無しさんNGNG
WM_CTLCOLORBTNをハンドリングすればいいんじゃねーか?
サブクラス化でもいいかもね。
0773デフォルトの名無しさんNGNG
ごくフツーのコンソールアプリケーションに対して、終了通知を送信する(される)仕組みを
追加したいんですけど、一番COOLな方法はなんでしょうか?
0774769NGNG
ウィンドウクラスで背景色を以下のように変更したら
コントロールごとに背景色を変更せずにすみました。
もともとウィンドウの背景自体が白だったのでこうしたほうが早いかと、

hbrBackground = (HBRUSH)GetSysColorBrush(COLOR_MENU)

これもみなさんの助言のおかげです
アリガト(´▽`)サン!
0775766NGNG
>>767
レスどうも。
何がしたいかと言うよりも、まずどんな動きをするのかが知りたいです
Callbackは引数をファイルに書き込んでIDYESを返すだけにしています

書き込んでいるレジストリは、
HKEY_CLASSES_ROOT\CLSID\xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\
以下に CLSID、InprocServer32\ThreadingModel="Apartment"、

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\
Shell Extensions\Approved\xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

と、
HKEY_CLASSES_ROOT\Directory\shellex\CopyHookHandlers\myCopyHook\
(既定)={xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}
HKEY_CLASSES_ROOT\Printers\shellex\CopyHookHandlers\myCopyHook\
(既定)={xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}

これでだめだったのでさらに、
HKEY_CLASSES_ROOT\*\shellex\CopyHookHandlers\myCopyHook\
(既定)={xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}
HKEY_CLASSES_ROOT\Folders\shellex\CopyHookHandlers\myCopyHook\
(既定)={xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}

に書き込みましたが、やはりだめでした・・・
そもそもClassFactoryが呼ばれていないので
根本的に間違えている気もしますが、何が悪いか解りません
0776デフォルトの名無しさんNGNG
>>775
当然、InprocServer32 の(既定)にDLL名は書いてるよね?
サンプルのShellExtを見てみたらどうかな。
0777デフォルトの名無しさんNGNG
>>773
TerminateProcess()
GetExitCodeProcess()
0778デフォルトの名無しさんNGNG
GUIDを含むヘッダをどう書けばいいか悩んでます。

#include <windows.h>
DEFINE_GUID(name, xxxxx);

というヘッダ(aaa.h)を配布する場合、使う側はソースファイルの一つで

#define INITGUID
#include "aaa.h"

と書いてGUIDの実体を作りますよね?
この場合aaa.h内のwindows.hもINITGUIDの影響を受けてしまい
windows.h内にDEFINE_GUIDがあると、それも実体が作られてしまうのではないでしょうか?
一体どうすればいいのでしょうか?
0779デフォルトの名無しさんNGNG
>>778
ふつうにexternでいいんじゃないの?
0780デフォルトの名無しさんNGNG
win32apiは16bitコンパイラーから呼び起こせますか?
0781デフォルトの名無しさんNGNG
DQNは新打法が良い
0782778NGNG
>>779
ヘッダとDLLを提供するだけなので、利用者側でGUIDを定義してもらわないといけないのです。
__declspec( selectany )や__declspec( uuid(“”) )が使えればいいのですが
これってMS固有ですよね・・・
0783デフォルトの名無しさんNGNG
>>780
http://www.microsoft.com/japan/msdn/library/?url=/japan/msdn/library/ja/jpdllpro/html/Toppage_16BitThunk.asp
http://support.microsoft.com/?scid=kb;ja;104009
0784デフォルトの名無しさんNGNG
助けてください(;_;)
DLLがロードされたときスレッドを起動し、アンロードされたとき停止するようにしたいため、
以下のようなコードを書いたのですが、
WaitForSingleObjectのところで永久に待ち状態になってしまいます。

何がいけないのでしょうか。

  BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) {
    if (fdwReason == DLL_PROCESS_ATTACH) {
      DisableThreadLibraryCalls(hinstDLL);
      run = true;
      hThread = CreateThread(0, 0, Thread, 0, 0, 0);
    }
    else if (fdwReason == DLL_PROCESS_DETACH) {
      run = false;
      WaitForSingleObject(hThread, INFINITE); // ← ここでロックしてしまう。
      CloseHandle(hThread);
    }
    return TRUE;
  }

  DWORD Thread() {
    for ( ; ; ) {
      if (!run) {
        return ERROR_SUCCESS;
      }
      Sleep(1000);
    }
    return ERROR_SUCCESS;
  }
0785デフォルトの名無しさんNGNG
>>784
スレッドが終了していないからです
0786デフォルトの名無しさんNGNG
>>784
とりあえずrunにアクセスする際にクリティカルセクションで同期を取りなさい
0787デフォルトの名無しさんNGNG
各位、ありがとうございます。
>>785
if (!run) が成立してリターンはしてるのですが、WaitForSingleObjectでロックしてしまいます。
>>786
端折って書きましたが、実際のコードでは同期をとっております。
0788デフォルトの名無しさんNGNG
ExitThreadで明示的に終了
戻り値はGetExitCodeThreadで取得

とかしてみたら...
もっと根本的な同期処理の問題か
0789デフォルトの名無しさんNGNG
>>784
DWORD Thread() は WINAPI でなくてもいいのか?
0790デフォルトの名無しさんNGNG
コールバック関数は

DWORD Thread(LPVOID)  にしなくていいの?
0791デフォルトの名無しさんNGNG
>>789
引数が0または1個では問題ないかと
0792デフォルトの名無しさんNGNG
なんとなく自分で調べてわかりました。

私は「プロセスが1個なんだから、DLLも1つしかアタッチされてないだろう」と思っていたのですが、

実際 >>784 のコードで何が起こっているかというと、メインとスレッドが、各自、DLLをアタッチしているわけです。

そして、if (!run) が成立してスレッドがリターンすると、

スレッドはDLLMainを呼び出して自分自身にアタッチされていたDLLをデタッチしようとするわけですが、

目下メインがスレッドをデタッチ中なので、「DLLMainのシリアル実行」の仕組みにより、

スレッドはDLLMainを呼べません。したがって、>>785 の兄貴の言うとおり、そもそもスレッドが終了できないわけです。
0793792=784NGNG
…と考えましたが合っているでしょうか?
0794デフォルトの名無しさんNGNG
>>793
ThreadProc の方でリターン前に done = true; 等して、
DLLMain では sleep しつつ done を待つ、とかにするのがよいと思います。

ここでカッコ良くフラグじゃなくてイベントを使おうとすると、またハマリます。
(漏れだけかもしれないけど)
0795792=784NGNG
>794
ありがとうございます。
私の場合、今回は結局、DLLMainで自動的にスレッドを停止しようとするのはやめ、
DllFinalizeというのを作り、これを明示的に呼んでください、というふうにしました。
0796デフォルトの名無しさんNGNG
自作のダイアログで MessageBox() の MB_TASKMODAL と同じ機能を実現するにはどうすればよいのでしょうか?
ご存知の方がらっしゃいましたら、どうかよろしくお願いします。
0797デフォルトの名無しさんNGNG
複数のDLLをまたがるsingletonってどうやったら実装できるのでしょう?

なんかstatic変数が共有されてくれないみたいなんですが。
0798792NGNG
>> 796
たまたま最近似たようなことをやりました。
EnumThreadWindowsでウィンドウを列挙して、自分以外のウィンドウをディセーブルすれば良いかと。

HWND hMyWnd;
std::list<WndStatus> WndStatusList;

// ウィンドウを列挙
void Disable()
{
EnumThreadWindows(GetWindowThreadProcessId(hMyWnd, 0), EnumThreadWndProc, 0);
}

// ウィンドウ列挙コールバックの中で自分以外のウィンドウをディセーブル
BOOL CALLBACK EnumThreadWndProc(HWND hWnd, LPARAM lParam)
{
if (hWnd != hMyWnd)
{
// 自分以外のウィンドウの状態を保存
WndStatus x;
x.hWnd = hWnd;
x.bEnable = IsWindowEnabled(hWnd);
WndStatusList.push_back(x); // 元に戻すときはこの内容をリストアする

// ディセーブル
EnableWindow(hWnd, FALSE);
}
return TRUE;
}
0799デフォルトの名無しさんNGNG
>>798
ありがとうございます。
大概の場合には望みの動作させることができました。
ただ WM_PAINT の処理中に呼び出された場合、
ダイアログが複数起動してしまうことがありました。
このコードをベースに、もう少し考えてみたいと思います。
ありがとうございました。
0800デフォルトの名無しさんNGNG
任意のフォントで、任意の文字コードについて、描画可能か(豆腐にならないか)を
テストしたいのですが、利用できそうなAPIはあるでしょうか?
(豆腐になるならその文字コードだけ動的に別のフォントに切り替えて表示したい)
0801デフォルトの名無しさんNGNG
ttp://www.microsoft.com/typography/TrueTypeProperty21.mspx

これで表示できるような情報とりたいってか?
少なくともTrueTypeのフォーマットには情報含まれてるらしいが。
FontLinkとかもあるしな。
0802デフォルトの名無しさんNGNG
GetGlyphIndices?
0803デフォルトの名無しさんNGNG
GetFontUnicodeRanges?
0804デフォルトの名無しさんNGNG
ツリービューの任意の項目を選択状態にするにはどうすれば良いのでしょうか
こんな感じでやってみたのですが、どうにも上手く行きません

TVITEM tvi;
tvi.mask = TVIF_STATE;
tvi.hItem = hTarget; //変えたい項目のハンドル
tvi.state = TVIS_SELECTED;
SendMessage( handleTreeView, TVM_SETITEM, (WPARAM)0 , (LPARAM)&tvi );

SetCurselがあればいいのに_| ̄|○
0805デフォルトの名無しさんNGNG
>>797
CreateFileMapping
0806デフォルトの名無しさんNGNG
>>805
それでは他のプロセスとも一緒になってしまうではないか。
0807デフォルトの名無しさんNGNG
>>797意味不明
0808デフォルトの名無しさんNGNG
>>797
DLLの中のstatic変数は、1プロセス内ならば共有されるはず。
プロセスをまたがってるんじゃないか?
もしくは、DLLがリンクしているstaticライブラリ内に変数がある場合はだめ。
それぞれのDLLごとにコピーされるから。
0809デフォルトの名無しさんNGNG
pragma使っとけ
0810デフォルトの名無しさんNGNG
>>804
TreeView_SelectItem でどうですか。
0811797NGNG
>>808 ありがとうございます。
>もしくは、DLLがリンクしているstaticライブラリ内に変数がある場合はだめ。
やっぱりそうですか。そうですよね。考えてみれば当然ですね。^^ゞ

では、質問の仕方を変えます。

「OS全体で一つ」のメモリを作るにはCreateFileMappingが使えますが、
「そのプロセスで唯一」のものを作る、何かよい方法はないでしょうか。
皆様宜しくお願いします。
0812デフォルトの名無しさんNGNG
>>806
プロセスIDを元に生成した文字列で名前つきの共有メモリを作れば、
プロセスごとに唯一の共有メモリにできる。


>>811
処理系に依存する方法だが、VC++の場合、たとえば
extern __declspec(dllimport) int foobar;
と書いたヘッダをインポートすれば、
foobarへの参照はインポートアドレステーブル経由で間接的に行われるように
コンパイルされる。

逆にエクスポートする側では
__declspec(dllexport) int foobar;
と書いておけば、foobarのアドレスがエクスポートテーブルと
インポートライブラリに出力される。
または定義ファイルを書いてエクスポートさせることもできる。
0813デフォルトの名無しさんNGNG
>>807 頭悪いね
0814800NGNG
>>801-803
ありがとうございます。
GetFontUnicodeRanges()でうまくいきました。
0815デフォルトの名無しさんNGNG
>>808
そもそも static はスコープ(宣言されたコンパイル単位の中でのみ「名前による
アクセス」が可能で、翻訳単位を超えたアクセスはできない)を宣言してるという
だけで、メモリ空間がどうのこうのというのとはちょっと違うのではないでしょうか?
0816デフォルトの名無しさんNGNG
>>815
おちつけ。そんな意味でstaticと言ってるわけじゃないことに気付け。
0817デフォルトの名無しさんNGNG
>>797
片方の DLL に生成・破棄の実装をまとめてしまえばいいんじゃないの?
0818デフォルトの名無しさんNGNG
>>817 に同意
複数のdllから参照される変数が必要な設計になるようなら、
dllの構成自体を少し見なおしたほうがいいと思います。
0819デフォルトの名無しさんNGNG
>>814
GetFontUnicodeRangesはビットが立っているUnicodeRangeに
すべてのグリフが実装されていることを保証するわけではない
たとえばCJK統合漢字のビットが立っていても20902字すべて
実装してるとは限らない
0820798NGNG
私も逆に

>>799
> ただ WM_PAINT の処理中に呼び出された場合、
> ダイアログが複数起動してしまうことがありました。

と同じ問題で困っており、回避する方法があれば知りたいです。

すなわち、モーダルダイアログのボタンが押されるまで処理を止めたいが、
そのダイアログのメッセージループから他のウィンドウのメッセージループに処理が移ってしまい、
そこで同じ処理が呼ばれるとダイアログがもう一つ出てしまうことがありますが、
どのような対策が有効でしょうか?

ダイアログは別のスレッドで出し、メインの処理は止めてしまう方法を試しましたが、
それだと他のウィンドウの更新が完全に止まってしまって格好悪いし、良い方法はないでしょうか。

(他のプログラムから呼ばれるDLLを作っているので、他のウィンドウの処理を変更することは不可です)
0821デフォルトの名無しさんNGNG
>>820

case WM_PAINT:
{
static bool flag = true;

if( flag )
{
flag = false;
モーダルダイアログ呼び出し
flag = true;
}

}
0822デフォルトの名無しさんNGNG
直前にアクティブになっていたプロセスの、
ウィンドウハンドルを取得したいのですが、
どうやればいいのでしょうか?
0823デフォルトの名無しさんNGNG
>>822
すみません、解決しました。
0824デフォルトの名無しさんNGNG
>>823
せめてどのウィンドウメッセージのどのパラメータかぐらい書けよ。
0825デフォルトの名無しさんNGNG
>>823
訊くだけ訊いてフィードバックせずに去るの(・A・)イクナイ
0826デフォルトの名無しさんNGNG
>>824-825
すみません。
このサンプルで解決しました。
http://hp.vector.co.jp/authors/VA016117/lastactive.html
0827デフォルトの名無しさんNGNG
>>822
ちょいと試してみたんだが、WM_ACTIVATEAPP と EnumThreadWindows() で
いけそうな気がするものの、スレッド ID が 0 で返ってくる場合が多くてうまくいかない。
なので、フック(SetWindowsHookEx()) しかないかなーと思ったら
ttp://hp.vector.co.jp/authors/VA016117/lastactive.html
にそういうコードがあった。
これは WH_CALLWNDPROC を使っているようだが、WH_CBT に HCBT_ACTIVATE ってのが
あるんでこっちでもいけそうな気がしないでもない。
…と、一筋縄じゃいかない感じなんで本当に解決したんなら教えて欲しい。
0828デフォルトの名無しさんNGNG
あー、被った。_| ̄|○
やっぱフックだったのね。
0829デフォルトの名無しさんNGNG
マックアドレスを取得する方法を教えてください。
0830デフォルトの名無しさんNGNG
ウィンドウのIDからウィンドウハンドルを取得するには
どうしたらいいのでしょうか。
0831デフォルトの名無しさんNGNG
質問。
プロシージャ内でならWM_COPYDATAが受け取れるのですが
↓の通りにするとなぜかWM_COPYDATAが受け取れないです。

GetMessage(&msg,hwnd,0,0);
if(msg.message == WM_COPYDATA)
{
MessageBox(NULL,"何か来た","テスト",MB_OK);
}
DispatchMessage(&msg);

諸々の事情でC#でWM_COPYDATAメッセージを受け取る必要があるので
この方法でやろうと思ったんですが、上記の通りうまく行きません。
よろしくお願いします。
0832デフォルトの名無しさんNGNG
>>830
ウィンドウIDって何?(・∀・)ニヤニヤ
ウィンドウハンドル(HWND)は全プロセスで共通値になるはずだよ。
HWNDは、いわゆるハンドル(HANDLE)と違い、アクセス制限がないので
サービスをデスクトップと対話させたらマズイって事だね。
0833デフォルトの名無しさんNGNG
>>831
C#ならWndProcメソッドをオーバーライドすれば?
0834830NGNG
>>832
えっとCreateWindow()で子ウィンドウとして作ったボタンとかエディットコントロールの
ハンドルを、CreateWindow()の9番目の引数をもとに取得したいということです。

ウィンドウハンドルから、そのウィンドウのIDを取得するのは
GetWindowLong(hWnd, GWL_ID)
でできますよね。その逆をやりたいんです。
HWND hWnd = GetWindowHandleFromID(ID);
みたいに。
0835デフォルトの名無しさんNGNG
GetDlgItemはいかが?
0836830NGNG
>>835
まさに私の求めていたものです。
ありがとうございます!
0837デフォルトの名無しさんNGNG
一時ファイルの作成からそのファイルをオープンするまでを
アトミックに行う方法があれば教えてください。下のコードだと
コメントのようなことが起こりえてしまうと思うんですよ。


//ファイルが作られtmpnameに名前が入る
GetTempFileName(dir, prefix, 0, tmpname);
/* ここで、万が一、他のやつがtmpnameを開いて書き込んでしまったら? */
handle = CreateFile(tmpname, ....); //排他的に開く
0838デフォルトの名無しさんNGNG
リトライすれば ?

どうしてもいやなら、自分で一時ファイル名生成を実装すればいいだけだと思う。
0839デフォルトの名無しさんNGNG
>>838
ども。どっちにしても無限ループすることが論理的には可能な気がするのが
イヤだけど仕方ないですかね。
0840デフォルトの名無しさんNGNG
ファイル名生成をキュー処理するようにすればいいんでわ
0841デフォルトの名無しさんNGNG
>>676 >>681
とりあえず、ReactOSのCreateProcessあたりのソースでも読んでみれば?
0842デフォルトの名無しさんNGNG
>>840
どういうことですか?
0843デフォルトの名無しさんNGNG
>>839
可能だろうけどすごい確率だよ。
原発とか医療ソフトとかで無いのなら、「失敗しますた」で処理停止すればいいんでない?
ここで気にするべきなのは、失敗したまま処理が続行されないことだと思う。

ほとんど起こりえないことに神経質になってっと、禿げるのが早まるぞ〜。
0844デフォルトの名無しさんNGNG
アトミックなキュー操作ができるならそもそもそんな事ではまらないような

最悪臭いがCREATE_NEWで失敗したら別の名前でやりなおすのが簡単
0845デフォルトの名無しさんNGNG
>>839
そりゃ一時ファイルを作成しようとしたときにそのファイル名がバッティングしている可能性は 0 じゃ無い。
だから、リトライしてもそのたびにぶつかる可能性も (急激に 0 に近づいていくが) 0 にはならないよ。

どうしてもそう言うのがいやなら、自分で独自のルーチン作るしかないでしょ ?
0846デフォルトの名無しさんNGNG
>>845
リトライで実用上全く問題ないとおもっているので無理なら無理
でいいんです。

で、わからないのは>>838でも独自で実装すれば…って書いて
あるんですが、実装が「適当に名前を生成し、それがディスク上
にすでに存在していたら他の名前を試す」しか思いつかないの
です。(GetTempFileNameの実装もこれだと思っている。)
つまり、自分で作るにしても有限時間で終わると保証できる
方法ってないんじゃないですか?ということです。
0847デフォルトの名無しさんNGNG
プロセスIDとスレッドIDと現時刻から一時ファイル名生成
0848デフォルトの名無しさんNGNG
そのファイル名はすでに存在できるでしょう?
0849デフォルトの名無しさんNGNG
>>847
Uniqueなファイル名を如何に作るかが問題なのではないことに気付こうよ。
0850デフォルトの名無しさんNGNG
>>849
しかし>>847の発想もいいと思う。
Windowsにファイル名を作らせるのではなく、乱数を用いたファイル名を自分で作って
テンポラリフォルダにファイルを作成するという方向性は、重複を避けるのに良いのでは
ないだろうか。






乱数の重複が〜なんてホザくなら、C3でも使ってCPU内の電磁ノイズで乱数初期化でもしろ。
0851デフォルトの名無しさんNGNG
可能性が0でないかぎり、高橋名人はそこを突くことができる
0852デフォルトの名無しさんNGNG
>>846
当然完全な方法は存在しないよ。

普通は、そのプログラム独自のディレクトリ用意してその中で一意のファイル名を生成するようにすれば十分だと思うけど、>>848 みたいに悪意のプログラムを考えたらどうしようもない。

>>849
ん ? 何が言いたい ? 説明求む。

>>850
プロセス番号はその時点でシステム内でユニークであることが保証されているから Unix のシェルプログラムなんかだと普通に使われてるよ。
そういう意味で乱数よりいいと思う。
ただ >>848 みたいな悪意あるプログラムからは、狙われやすいけど。

>>851
確かに。
でも、突かれてもリトライすればいいだけだろ。
16連射以上でリトライすれば、大丈夫だと思う。
0853デフォルトの名無しさんNGNG
完璧に動くことを証明したいのはわかる。
でもファイルシステムの欠陥のためにそういうことができないとか、
そういう場合はほとんど起きないレベルまでガードしていって、
その上でもしエラーが起きたらそれ以上進めないようにするので良いのではないか?
0854デフォルトの名無しさんNGNG
>>846
その方法で有限時間で終わると思うけど。
0855デフォルトの名無しさんNGNG
デスクトップへのディレクトリパスを取得するAPIはありますか?
0856デフォルトの名無しさんNGNG
>>846
リトライ回数が有限であれば必ず終了するよ。
0857デフォルトの名無しさんNGNG
>>854
証明してみてくれ。
0858デフォルトの名無しさんNGNG
自分で設定するリトライ回数が有限保証時間だな。
最大値はファイル名でも何かのIDでもOSがファイルを区別できる表現の数。
0859デフォルトの名無しさんNGNG
>>855
googleにきけ
0860855NGNG
自己解決しました。
0861デフォルトの名無しさんNGNG
マナーの悪い奴が多いな。
0862デフォルトの名無しさんNGNG
まあ、な。
0863849NGNG
>>852
846はそんなこと求めてないだろ、と。
0864デフォルトの名無しさんNGNG
>>863
ん ?
>>846 が求めてるのは、一時ファイルを有限時間内に作成する方法だろ ?
で、一時ファイル作成するにはファイル名が必要だから、ユニークなファイル名を作る方法についてあーだこーだ言ってるだけだが、それが何か ?
0865デフォルトの名無しさんNGNG
>>864
ユニークなファイルが作られるところまではAPIでできているだろ?
0866デフォルトの名無しさんNGNG
それが完璧にユニークである保証がないから困ってるんだろ。
0867865NGNG
そうなの?
私ゃファイルが作られた後、
自分が利用する前にopenされることを懸念していると読んだんだけど、
それ以前の問題だったんだ?
0868デフォルトの名無しさんNGNG
どのような方法でファイル名を決めたところで同じことだっていう意味じゃないの
0869デフォルトの名無しさんNGNG
SetPriorityClassでプロセスの優先度を一時的に上げたら?
REALTIME_PRIORITY_CLASSだと最強になるらしい。
0870デフォルトの名無しさんNGNG
あ、でも割り込みかかるとダメか。
割り込みハンドラからファイル作ったりできるのかな?
Windowsのことはよくわかんねぇや。
スレ汚しすまんね。
0871デフォルトの名無しさんNGNG
権限が無ければREALTIMEはもらえないけどな(HIGHERになる)。
真のREALTIMEは多分ユーザーモードにはくれないし。
0872デフォルトの名無しさんNGNG
tmp[0-9a-f]{1,5}.tmp
なファイル名を持つファイルで埋め尽くしたディレクトリで
GetTempFileName(".", "tmp", 0, tmpname)
ってしたら3分ぐらいディスクガリガリしてからおめおめと失敗返してきた。
winxp
0873デフォルトの名無しさんNGNG
>>872
ワロタ
0874デフォルトの名無しさんNGNG
誰か教えてくらはい

ログオンユーザの環境変数とシステムの環境変数を
分けて一覧が欲しいのですが、どのAPIを使えばいいのでしょうか?

ログオンユーザの権限、所属するグループも読み込みたいのですが、
これはどのAPIを使えばいいのでしょうか?

調べたけど getenvとかGetEnvironmentVariableくらいしか
見つかりませんでした・・・_| ̄|○
0875デフォルトの名無しさんNGNG
>>833
ありがとうございます。
非常に助かりました!
0876いなむらきよしNGNG
キケー!
0877デフォルトの名無しさんNGNG
>>876
これって人力なんだよね。少し感心した。
0878デフォルトの名無しさんNGNG
インストール時にワークファイルもアプリディレクトリに確保してしまえば実行時には無問題…
0879デフォルトの名無しさんNGNG
permission・・・・
0880デフォルトの名無しさんNGNG

>>874
RegQueryValueEx

SYSTEMかんきょーへんすー
HKEY_LOCAL_MACHINE
System\\CurrentControlSet\\Control\\Session Manager\\Environment

USERかんきょーへんすー
HKEY_CURRENT_USER
Environment
0881804NGNG
>>810
すいません、レスみのがしてました。
まだ出来てないのですが(うーむ何故だ)
説明見る限りこれで間違いなさそうです、ありがとうございました。
0882デフォルトの名無しさんNGNG
テンポラリファイルのことなんだけど、
なんだか、さいころを振る時にさいころが立つ心配をして怖くてふれないみたいな話だな。
排他的に開くにせよ、ユニークな名前の生成にせよそんなもん思いっきりへんてこな名前
にすれば、 悪意が存在しなければ、億年単位で安心して寝られるだろ。
それとも、論理的に証明できなければ絶対だめなのか?
0883デフォルトの名無しさんNGNG
一時的にディレクトリを完全にロックしてしまえれば確実に排他できる気はするが。
0884デフォルトの名無しさんNGNG
>>882
あえてこだわってるだけだろう、さすがに。
0885847NGNG
>>880
さんきゅーべりーまっち
助かりました、ありがとう。

ログオンユーザの所属するグループも、
レジストリ参照になるのでしょうか?

HKEY_LOCAL_MACHINE\\SAMを見ろ、みたいな情報は
見つけたのですが、2000のスタンドアロン環境では
SAMの下にもSECURITY下にも、何も無いみたい・・

スマンが誰か教えてけろぉ〜
0886デフォルトの名無しさんNGNG
キーボードフックについて教えてください。
SetWindowsHookExでグローバルフックをかけて、特定のキーコードの時だけは、
CallNextHookExを呼び出さずに別のキーコードをPostMessageで投げ、
trueを返してメッセージを破棄するプロシージャを書いております。
まずまず期待道理の動作をしてると思っていたんですが、IMEがONの時はなんだか動作がヘンです。
具体的には、ONでもOFFでも無関係に直接入力されてしまうのですが、
これはIMM APIとかをいじらないとダメなのでしょうか。よろしくお願いします。
0887デフォルトの名無しさんNGNG
WM_IME_STARTCOMPOSITION
WM_IME_ENDCOMPOSITION
0888デフォルトの名無しさんNGNG
キーボードフックは、その名の通りキーボードからの入力をフックするだけだぞ。

> ONでもOFFでも無関係に直接入力されてしまうのですが

は正しい動作。他アプリのIME入力も調べたいのであればWM_IME系の
メッセージをフックするしかないと思う。

ちなみに、何をしたいかにもよるが>>887よりは
WM_IME_COMPOSITIONの方がいいかも
0889デフォルトの名無しさんNGNG
>>887-888
半分くらい理解できました。ご説明、どうもありがとうございます。
とりあえずこっちのフックは、IMEがONの時は無視することにして、
また別のコーディングをすることにしました。お騒がせしました。
0890デフォルトの名無しさんNGNG
テキストファイルの内容の最初の7文字だけを読み込もうとして
ReadFile(hReadFile , strFile , 7 , &dwReadSize , NULL);
としたんですが、その内容を出力してみると読み込めていないようです。

ファイルの最初のほうにファイルデータのようなものが記録されているため
だと思うんですが、そうだとしたらそのファイルデータのようなものの
サイズはどうやって取得すればいいんでしょうか?
0891デフォルトの名無しさんNGNG
>>890
テキストファイルにヘッダがあるのか?
ReadFileの戻り値とdwReadSizeが正常なら、出力に問題があるんじゃないの?
0892890NGNG
ReValue = ReadFile(hReadFile , strFile , 7 , &dwReadSize , NULL);
if(ReValue==dwReadSize) MessageBox(NULL , TEXT("サイズ正常") , NULL , MB_OK);
これでメッセージボックスが出ました。
読み込み自体は成功していると思っていいですか?
0893890NGNG
スマソ、読み間違えました。
調べたらdwReadSizeがNULLでした。
0894デフォルトの名無しさんNGNG
ということは、ReadFileの戻り値がNULL→読みに失敗している。
dwReadSizeの値がゼロ(NULL)→ゼロbyteしか読み込んでいない。
で一致してメッセージボックスが出たんでしょ。
ファイルハンドルhFileか、読み込み先メモリのほうを調べたらいいんじゃないの。
0895デフォルトの名無しさんNGNG
CreateProcessで子プロセスを作る際、それを子ウィンドウとして親ウィンドウの内部に表示させるにはどうすればいいんでしょうか?
0896890NGNG
INVALID_HANDLE_VALUEを返さないのでハンドルには問題ないです。

ReadFile(hReadFile , strFile , GetFileSize(hReadFile , NULL) , &dwReadSize , NULL);
MessageBox(NULL , strFile , NULL , MB_OK);
としたら、メッセージボックスにファイル内容はしっかり表示されました。

もうなんか意味ワカメです。
0897デフォルトの名無しさんNGNG
>>885
長いプログラムだからいちいち説明してられんのでつよ。
糞マニアックな機構を持ってる強力なセキリティ(藁
疲れるので鯖はLinuxかBSDへの移行をおすすめしまつ。

↓これだけでも一部分

セキリティ記述子(SD)は下に示す四階層の構造を持つ。

/* セキリティ記述子の構造 */
SD { // セキリティ記述子
オーナーID
グループID
 ACL(s) { // アクセス制御リスト(監査用)
  ACE { // アクセスエントリ(複数)
アクセスマスク
   SID // セキリティ識別子
  }
 }
 ACL(d) { // アクセス制御リスト(随意)
  ACE { // アクセスエントリ(複数)
アクセスマスク
   SID // セキリティ識別子
  }
 }
}
0898デフォルトの名無しさんNGNG
897の続き:
セキリティ記述子(SD)
二つのアクセス制御リスト(ACL)を持つ。
ACLの片方は監査、片方は随意。
監査ACL(SACL)は監査プログラムに制御される。
随意ACL(DACL)はユーザーに制御される。
各ACLは複数のアクセス制御項目(ACE)を持つ。
各ACEは一つのセキリティ識別子(SID)を持つ。

セキリティ識別子(SID)
WIN32SDKヘルプによると:
SIDの標準簡略表記法によって、 SIDの各要素を簡単に視覚化できます。
S-R-I-S-S...
上記の表記法で、
SはSIDの数字列の開始を示す識別記号、
Rはリビジョンレベル、
Iは識別子オーソリティ値、
Sはサブオーソリティ値です。
この表記法によるSIDの例を次に示します。
S-1-4138-86
上記の例のSIDのリビジョンレベルは1、
識別子オーソリティ値は4138、
サブオーソリティ値は86です。
識別子オーソリティ値は、 SIDを発行したエージェンシ
(通常はMicrosoft(R) Advanced Server(TM)のドメイン)を
識別する値と、 そのエージェンシ内のユーザーやグループを
一意に識別する32ビットの相対識別子(RID)で構成されます。

まだまだ続くのだが(藁
0899デフォルトの名無しさんNGNG
>>895
CreateProcessで使ったPROCESS_INFORMATION構造体のdwProcessIdを、
EnumWindowsのコールバック関数の中でGetWindowThreadProcessIdして得たIDと比較して、
そのウィンドウハンドルをSetParentするなりSetWindowLongするなりして子にすれば?
対象ウィンドウのウィンドウクラスやウィンドウタイトルが一定ならもっと簡単だけど
0900デフォルトの名無しさんNGNG
>893
なぜGetLastErrorしない?
0901885NGNG
>>897 & >> 898

超ウルトラスーパーサンクス♪

そんなに大げさな作りだったとは・・
失礼、強力なセキュリティ機構と想像を越えておりまつた。

イベントログの説明文を、
引っ張ってこようとした時を思い出した。

先が長そう・・・ 

Thanks,
0902デフォルトの名無しさんNGNG
>>901
>強力なセキュリティ機構と想像を越えておりまつた。

なので、MS傘下のPGさえ面倒臭がってデフォルト以外を使おうとしない。
↓
安易にadmin権限を要求するアプリが出来上がる。
↓
セキュリティ台無し
0903デフォルトの名無しさんNGNG
>>896
・strFileは読み込むのに十分な領域があるか
・読み込んだ文字列は'\0'終端になっているか。 ReadFileは勝手に'\0'を付けてくれないぞ。
・読み込んでるファイルは本当にテキストファイルなの?
0904デフォルトの名無しさんNGNG
>>846とか
ハンドルが開放されたら無効になる無名ファイルって作れなかったっけ?
0905デフォルトの名無しさんNGNG
>>902の別バージョン

安易に別権限を要求・作成するのがウザイ。
↓
空のACLをつくる(EveryoneAllow)。
↓
より一層セキュリティ台無し
0906デフォルトの名無しさんNGNG
カスタムコントロールといえば、現在はActiveXコントロールを
指しますが、その昔、16bit時代には、DLL形式のカスタムコントロール
というのがあって、VBXが出る前は、カスタムコントロールといえば、
この手法を指していました。
この手法は、現在のWin32環境(.Netではない)でも実現できるので
しょうか。というのも、今回の開発では、MFCの使用を禁止されている
ため、ActiveXコントロールの実装ができません。したがって、DLL型の
カスタムコントロールが実装できないかと調査中です。

できるという情報も、不可能という情報も見つかりません。
ご存じの方、ご教示ねがいます。

0907デフォルトの名無しさんNGNG
なんのActiveX使うんですか?
0908デフォルトの名無しさんNGNG
MFC使わずに実装すればいいし、ATLを使うという手もある
0909906NGNG
>>907

例えば、特殊なテキストボックス等を作成する予定です。
旧カスタムコントロールが使えない場合、標準コントロールを
サブクラス化する手法も考えてしますが、今のところ、まだ
カスタムコントロール化をあきらめていない状況です。
0910890NGNG
>>900 >>903
ありがとうございます。解決しました。
Memory = strFile;
free(strFile);
MessageBox(NULL , Memory , NULL , MB_OK);
このように出力していたんですが、2行目と3行目の位置を入れ替えたら
文字列がちゃんと出てきました。
0911906NGNG
>>908

ATLの使用も禁止されています。理由は、他のランタイムを使用する
ことにより、配布先環境のバージョン相違や相性から起因する不具合を
極力防ぎたいという理由からです。

Windowsなんてランタイムのかたまりなんで、この時点で、
そもそもおかしな話だと思うのですが。
0912デフォルトの名無しさんNGNG
>>911 よくわからんがスタティックリンクしてもダメ…なんだろうな。。
0913デフォルトの名無しさんNGNG
自分で定義したウィンドウクラス使うだけだろ。なにが難しいんだ?
0914906NGNG
>912

さっき言った理由以外に、ベースPGが16ビットのCのみだった
ということと、スタティックリンクになると実行モジュールが
大きくなるという理由で、パスしたいとのことです。

ま、通常、そこまでわがまま言うなら、カスタムコントロールなど
使わずに標準コントロールで我慢せい!ってところですが、とりあえず
今のところは指示通りでいけるかどうか、調査しているところです。
0915デフォルトの名無しさんNGNG
実装できるかと言われれば、出来る、としか答えようが無いが。
0916906NGNG
913さんと915さんの回答より、取り分け、これといった技術を
使うもなにも、ウィンドウクラスを作れば、それで終わりって
話なんですかね。
であれば、そのようなドキュメントが見つからないのも納得です。
とりあえずサンプル作ってみます。

みなさんありがとうございました。
0917デフォルトの名無しさんNGNG
・・・実行モジュールサイズ云々という動機が今時じゃないですね。
一体どんなプロジェクトなのだろう?
0918デフォルトの名無しさんNGNG
winのソースみたら?
0919906NGNG
おかげさまで、旧カスタムコントロールというか、
単純にDLL化されたウィンドウクラスをダイアログに
貼り付けて動かすことに成功しました。
ありがとうございました!
0920デフォルトの名無しさんNGNG
コモンコントロールなんかも普通にDLLで実装されているわけで。
0921デフォルトの名無しさんNGNG
WinXpから標準でCD-R/CD-RW を焼く機能が付いてますよね。
エクスプローラーで、CD-Rドライブへファイルをドラッグ&ドロップして、ウイザードで焼くやつ。
あれを自動化して、ファイルのバックアップを取りたいと思っているのですが、
あの機能のAPIってだれかわかりませんか?

0922デフォルトの名無しさんNGNG
>>921
"CD-R"をSDKで検索かけたらXP/Server2003用COMインタフェース"IDiscRecoder"が出てきたわけだが‥‥
SDKくらいは調べませう
0923デフォルトの名無しさんNGNG
IMAPIとはさすがMS
0924デフォルトの名無しさんNGNG
あるウィンドウが、EnumWindowsで列挙される「トップレベルウィンドウ」かどうかを判定する方法を教えて下さい。

■やりたいこと:
 1 デスクトップ上のウィンドウをZオーダ順に並べた配列を作りたい。
 2 ↑その配列を常に最新の状態に保ちたい。

■困っていること:
1はEnumWindowsとGetNextWindowでできました。
で、2もフックプロシジャでWM_CREATEとWM_WINDOWPOSCHANGEDを捕捉すればOKかと思ったんですが、
EnumWindowsで取得される「トップレベルウィンドウ」に該当するかどうか判定する方法がわからなくなりました。

GetParentやGetWindow(hwnd, GW_OWNER)で判定しようと思ったのだけど、
どうもEnumWindowsで取得されるウィンドウには、ParentやOwnerを持っているものが含まれるらしく、
それらを除外してしまうとZオーダ順の配列が作成できません。

WM_CREATEが発生する度にEnumWindowsを呼び出して照合すればよいのですが、
もっとスマートな方法がないものでしょうか? ご存知の方、よろしくお願いします。
0925デフォルトの名無しさんNGNG
WS_CHILD
0926デフォルトの名無しさんNGNG
>>925
試してみたのですが、なぜかEnumWindowsで取得したウィンドウに
WS_CHILDフラグを含むものが幾つかあるんです。

■ソース(Delphi7)
var
arrRec: array of HWND;
// ↑EnumWindowsで取得したHWNDの配列

procedure TForm1.Button2Click(Sender: TObject);
var
iM: Integer;
begin
for iM := 0 to High(arrRec) do begin
if (GetWindowLong(arrRec[iM], GWL_STYLE) and WS_CHILD) <> 0 then
Memo1.Lines.Add(
IntToStr(arrRec[iM])
+', '+ IntToStr(GetWindowLong(arrRec[iM], GWL_STYLE) and WS_CHILD)
);
end;
end;

■結果
197414, -1006632960
131860, 1149272337
393984, 1151369489
(以下略)
0927デフォルトの名無しさんNGNG
>>926

a. WS_CHILD でない
b. 親ウィンドウが無い
c. 親ウィンドウがデスクトップウィンドウ

のどれかを満たすものがトップレベルウィンドウの様ですよ。
0928デフォルトの名無しさんNGNG
>>926
MSDN読んでくれ。
EnumWindows 関数は、子ウィンドウは列挙しません。ただし、WS_CHILD スタイルを
持つ、システムにより所有されたいくつかのトップレベルウィンドウは例外です。
0929デフォルトの名無しさんNGNG
XP SP2のIEで実行ファイルをダウンロードしてプロパティを見ると、
「属性」の下に「コンピュータの保護のため、このファイルへの
アクセスはブロックされました。」というメッセージと「ブロックの解除」
というボタンが表示されるのですが、これをプログラムから付けたり
消したりするにはどうしたらいいのでしょうか?
0930デフォルトの名無しさんNGNG
>>927-928
ありがとう! 参考にして改良してみます。

http://msdn.microsoft.com/library/en-us/winui/winui/windowsuserinterface/windowing/windows/windowreference/windowfunctions/enumwindows.asp?frame=true
と、MSDNの該当ページ貼っておきます(英語版だけど)。
0931デフォルトの名無しさんNGNG
横浜が17点取るこんな世の中じゃ
0932デフォルトの名無しさんNGNG
ポイズン
0933デフォルトの名無しさんNGNG
自分がソースでドラッグ&ドロップでCF_HDROPをエクスプローラ等に渡すとき、
ドロップ先のフォルダを知るにはどうしたらいいのでしょう?
0934デフォルトの名無しさんNGNG
既視感。
知る方法はない。
0935デフォルトの名無しさんNGNG
>>933
確か、sh系の命令でできたハズ・・・
0936デフォルトの名無しさんNGNG
WindowsXP以外でPPPoE接続させるにはどうしたらいいでしょう?
WindowsXPならRas*系が使えそう(ras.hでRASDT_PPPoEが定義されている)けど、
2kでも動かす必要があるので・・・
0937デフォルトの名無しさんNGNG
RASPPPoEをインスコさせる
0938936NGNG
>>937
それしかありませんか・・・RASPPPoEだとマルチセッション接続が出来ないので無理なんですよね・・・
0939デフォルトの名無しさんNGNG
ボタンコントロールに貼り付ける文字列に色をつけるにはオーナードローする必要がありますか?
0940デフォルトの名無しさんNGNG
>>939
ないと思う。たぶん。
0941デフォルトの名無しさんNGNG
色つきの文字を書いたグラフィックをボタンに貼り付ける
0942デフォルトの名無しさんNGNG
ありがとうございます。

>>940
分かりました。もう少し調べてみます。

>>941
SendMessageでちょこちょこ書き換えたいので、出来ればそれは避けたいんです
0943デフォルトの名無しさんNGNG
>>942
WM_CTLCOLORBTN
0944デフォルトの名無しさんNGNG
プッシュボタンならオーナードローしか手が無かったような
記憶がある。
0945デフォルトの名無しさんNGNG
SetTimer(NULL,NULL,FUNC,100); で何故かFUNCにコールバックされません。どうしてでしょうか?
0946945NGNG
ちなみに戻り値は0以外の数なので、失敗しているとは思えません。
0947デフォルトの名無しさんNGNG
とりあえずFUNCと100が逆

SetTimerでウィンドウを指定しないのは珍しいな。
周りのコードを読んでみないことには分からんが、MSDNには
>TimerProc コールバック関数を利用する場合も、呼び出し側スレッドでメッセージをディスパッチ (転送) する必要があります。これは、デフォルトウィンドウプロシージャがコールバック関数を呼び出すからです。
と書いてある。その辺は大丈夫?
0948947NGNG
今C++相談室見てきたんだがコンソールアプリ作ってるんだって?
それならますますPeekMessage系、TranslateMessage、DispatchMessage
のセットが通っていないっぽいな。コンソール入力待ち中にコールバック関数が
正しく呼ばれるかどうかは知らないけど、タイマー処理よりマルチスレッド
にしたほうが確実なような気もする。
0949デフォルトの名無しさんNGNG
よくコンパイル通ったな>ぬるぬるふぁんく、ひゃく

SetWaitableTimer って手もありかと。
0950デフォルトの名無しさんNGNG
コンソールならSleepで十分な気がする
0951デフォルトの名無しさんNGNG
>SetTimer(NULL,NULL,FUNC,100);
「(FUNCのアドレス)ミリ秒毎に100番地のコードを実行」してるのかな。

ひたすらtimeGetTime()を呼び続けるって手もあるにはある。
CPU大忙しだろうけど。

begin = timeGetTime();
while (1) {
  end = timeGetTime();
  if (end - begin >= 100) {
    ...
    begin = end;
  }
}
0952デフォルトの名無しさんNGNG
>>947 の
「メッセージポンプがない」
に一票。
0953デフォルトの名無しさんNGNG
SetTimerのコールバックはメッセージポンプがないと
呼ばれないというのはFAQだぞ
0954デフォルトの名無しさんNGNG
バックグランド動く画面無しプログラムを作っています。
Console Applicationで作ったのですがDOS窓が開いてしまいます。

どうしたら画面無しで作れるのでしょうか?
Win32APIで制御できませんか?
0955デフォルトの名無しさんNGNG
DETACHED_PROCESSで起動する
NT系ならサービスにする
0956デフォルトの名無しさんNGNG
非コンソールアプリケーションにする
0957954NGNG
>>955
ありがとう、調べてみます。
>>956
ありがと。でも、どーやるの?
0958デフォルトの名無しさんNGNG
>>957
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrev, LPSTR pCmdline, int nShowFlag)
{
return 0;
}
0959デフォルトの名無しさんNGNG
ソースを変更しなくても /subsystem:windows でいける
0960957NGNG
>>958
>>959
ありがとう、1000の前に試してみるね
0961945NGNG
亀レスで申し訳ありません。仕事してたもので。
そもそも目的は、周期的にコールバックする機能が欲しかっただけなのです・・・・・・・

>>947,>>949
間違えました。SetTimer(NULL,NULL,100,FUNC);でした。すいません。

>>948,>>952,>>953
メッセージディスパッチはやってませんでした。やる必要があったんですね。知りませんでした。ありがとうございます。
しかし、コンソールの場合ウインドウハンドルはどうすればいいのでしょう?

>>950
結局、そうしました。

>>951
それはちょっと・・・
0962デフォルトの名無しさんNGNG
>>945
PeekMessageのウインドウハンドルはNULLでおk
0963962NGNG
あ、GetMesssageでもな。
0964デフォルトの名無しさんNGNG
>>961
適当にループ回してWaitFor〜でタイムアウト待ち。これ。最強。
0965デフォルトの名無しさんNGNG
Sleep() でもいーとおもうけど timeGetTime() の方が精度がよいしゆーづーもきくんじゃないかな。
間違ってる?
0966デフォルトの名無しさんNGNG
>>965
どこからマルチメディア関数使う発想が沸いて来るのかと、小一時間(ry
そもそも、待ちができないし、timeGetTime()。

timeSetEvent()の事でしょ?でもどうかと思うよ、これ。
マルチスレッドだし。(最優先度のスレッドが起動する。)
初心者が使うのは1年はやい。
0967デフォルトの名無しさんNGNG
965はゲームプログラマなんでねーの。
0968デフォルトの名無しさんNGNG
コンソールアプリの標準入力・出力をパイプにつけかえて、
普通のWindowから操作したいと思っています。
(要はコンソールみたいなものを自前で作りたい)

起動したプロセスが標準入力(実際はパイプ)の入力待ちになっていたら
WM_CHARで来たキャラクタをパイプに突っ込みたいんですが、
「プロセスが入力待ちで待機している」
または
「パイプのRead側にプロセスが接続された」
という状態を知る方法はありますか?
0969デフォルトの名無しさんNGNG
パイプ書き込みスレッド作って自分で管理するしかないんじゃないの?
0970デフォルトの名無しさんNGNG
処理を受けてからできるだけ早く処理を返したいので、
続く処理をスレッドにしてしまって、放置して処理を返したいのですが、
CreateThreadで作成したスレッドハンドルはCloseHandleしないと
メモリに残ると聞きました。
そこで、CreateThread直後にCloseHandleしようと思うのですが、
スレッドが処理中にハンドルを閉じても、大丈夫なんでしょうか?
0971デフォルトの名無しさんNGNG
>>970
自分で、試せないのか?
0972デフォルトの名無しさんNGNG
>>971
ちょっと試して大丈夫だからと言って、ずっと大丈夫な保証は無いぞ。
特にマルチスレッドなプログラムではな。
0973デフォルトの名無しさんNGNG
スレッドが走行中は参照カウントが1つ増えて、終了時に1つ減る。
それとは別にCreateThreadが返したハンドルのために参照カウントが
1つ増えて、ハンドルを閉じたときに1つ減る。
つまりハンドルを閉じなければ走行中の参照カウントは2になる。
だからスレッドが終了してもハンドルを閉じるまでは消えないし
逆にハンドルを閉じてもスレッドが終了までは消えない。
長々と書いたがようするに大丈夫ってこった
0974デフォルトの名無しさんNGNG
>>969
もちろん自前で管理します。
自前で管理するために、起動先のプロセスが標準入力の
入力待ちになったことを知りたいんです。
入力待ちになっていたらパイプに文字を書き込む。
入力待ちになっていなかったら何もしない。
要はパイプに書き込むためのトリガーが欲しい訳です。
0975968=973NGNG
訂正 ×プロセス → スレッド

1.スレッドの状態取得
2.待ち状態であれば待ち要因を取得
3.待ち要因が標準入力の入力待ちであればパイプに書き込み

というような処理をイメージしてます。
あるいは別のパターンとして

1.パイプの入力待ち行列を取得
2.待ち行列に起動先プロセスのスレッドがあればパイプに書き込み

なんてのでもいいです。
ITRONだとref_tskとかref_semとかのref_xxx系関数で上記のような情報が
取得できるんですけど、Win32APIでret_xxxに相当するAPIって何になるんでしょ。
MSDNを調べまわったんですけどどうにもわからなくって・・・。
0976デフォルトの名無しさんNGNG
こんばんは、猫でもわかるWindowsプログラミングを書店で買ってきたのですが
2章の最後の練習問題2がどうしてもできません。
「WM_PAINTで文字を出力して、WM_RBUTTONDOWNのときに先ほど出力した文字の
色を変えるようにしろ」という問題です。
WM_RBUTTONDOWNのときにInvalidateRectで消して文字色つきで再描画しようと
したのですが、永久ループになってしまいました。
プークスクスとか言われるかもしれませんが、どなたか解る人がいたら
教えてください。
0977デフォルトの名無しさんNGNG
>>976
まずどんなソースを書いたのか肝心の部分だけでいいから晒せ。じゃないとアドバイスのしようも無いぞ
0978デフォルトの名無しさんNGNG
ソースも書き込んだほうがよいと思われ
0979デフォルトの名無しさんNGNG
>>974
どうして入力待ちになったかどうか知る必要があるのか分からないんだけど。
0980ビンラディンNGNG
>>974
WaitForInputIdle()じゃダメん?
0981976NGNG
最終的にこんなのを書きました。
頭悪いとか思うかもしれませんが、よろしくお願いします。
これは文字色は黒のままで右クリックしても変わりません。
WndProcのなかの一部です。   
   switch (msg){
case WM_PAINT:
switch(i){
case 0:
break;
case 1:
GetClientRect(hWnd, &rc);
hdc = BeginPaint(hWnd, &ps);
DrawText(hdc,
(LPCTSTR)szStr,
(int)strlen(szStr),
&rc,
DT_LEFT );
EndPaint(hWnd, &ps);
break;
}
break;

case WM_RBUTTONDOWN:
InvalidateRect(hWnd, &rc, TRUE);
GetClientRect(hWnd, &rc);
dtp.cbSize = sizeof(DRAWTEXTPARAMS);
dtp.iLeftMargin = 20;
dtp.iRightMargin = 20;
dtp.iTabLength = 4;

0982ビンラディンNGNG
>>980
ダメね
0983976続きNGNG
hdc = BeginPaint(hWnd, &ps);
SetTextColor(hdc, RGB(255, 0, 255));
DrawTextEx(hdc,
szStr,
-1,
&rc,
DT_WORDBREAK | DT_EXPANDTABS | DT_TABSTOP,
&dtp);
EndPaint(hWnd, &ps);
i = 0;
break;
0984デフォルトの名無しさんNGNG
おはだつるるん
0985デフォルトの名無しさんNGNG
>>981
WM_PAINT のときに SetTextColor(hdc, RGB(r, g, b));
WM_RBUTTONDOWN のときに r, g, b の値を変更して InvalidateRect();
でいかが?
0986デフォルトの名無しさんNGNG
>>981
とりあえずWM_PAINT以外でBeginPaint/EndPaintしたらだめ。
0987976NGNG
>>985
できました!!ありがとう981さん!!
これでぐっすり眠れます。
0988デフォルトの名無しさんNGNG
自演乙
0989デフォルトの名無しさんNGNG
ちょっとスレ違いかもしれませんが、
API関係ということで、ここで質問させてください。

2003Serverで使えるAPIかどうかを調べるツールがMSのHPに
あるらしいのですが、どこにあるかわかりません。
どなたか教えてください。

また、それ以外に2003Serverで使用可能なAPIを調べる方法が
ございましたら、ご教授願います。

よろしくお願いします。
0990デフォルトの名無しさんNGNG
使ってみるに限る
0991デフォルトの名無しさんNGNG
>>990
そんなこと言わずに、教えてください。
お願いしますm(__)m
0992デフォルトの名無しさんNGNG
SDKに書いてあるだろうに‥‥
0993991NGNG
>>992
すみませんが、どうやったらSDKが参照できるのか
教えていただけませんか?
0994デフォルトの名無しさんNGNG
>>993
たとえば以下のように書いてある。これ以上何を望むのだ?

Windows NT/2000:Windows NT 3.5 以降
Windows 95/98:Windows 95 以降
0995デフォルトの名無しさんNGNG
>>994
>>993に適する回答はMSDN嫁なんじゃないかな。ドキュメントがどこにあるのか分かってないような言い方だから
0996 ◆Manna2uCLg NGNG
なんだか、終わりかけなんで、
新しいスレッド立ててきますね。
0997 ◆Manna2uCLg NGNG
続きドーゾー

- Win32API質問箱 Build18
http://pc5.2ch.net/test/read.cgi/tech/1081702990/
0998デフォルトの名無しさんNGNG
大塚玲たま
0999デフォルトの名無しさんNGNG
999
1000デフォルトの名無しさんNGNG
大塚玲で1000げっとー
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。