Win32API質問箱 Build78

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
スレ立てるまでもない、Win32APIのついての質問はこちらへどうぞ。
やさしいお兄さんやお姉さんたちが答えてくれるかも。
「知らないならレスしないで下さい。ウザイだけです。 」なんて言わないでねっ!

過去スレ、関連リンクは>>2-10くらい。

■注意
・質問する前にMSDNライブラリやPlatformSDK、Google等で検索しましょう。
・日本語版MSDN Online Libraryは不完全です。英語版(http://msdn2.microsoft.com/library/)の利用推奨。
・APIフックなど高度な事をしたい場合はできるだけAdvenced Windowsを読みましょう。
・言語特有の問題やIDE、MFCやVCLなどの質問はそれぞれの言語や開発環境スレで

- Win32API質問箱 wiki
http://wiki.livedoor.jp/program1/d/FrontPage

Win32API質問箱 Build77
http://pc12.2ch.net/test/read.cgi/tech/1235494464/
2デフォルトの名無しさん:2009/03/29(日) 10:16:58
3デフォルトの名無しさん:2009/03/29(日) 10:17:39
4デフォルトの名無しさん:2009/03/29(日) 10:18:20
5デフォルトの名無しさん:2009/03/29(日) 10:19:02
6デフォルトの名無しさん:2009/03/29(日) 10:19:43
- Google 聞く前に検索
http://www.google.com/

下記サイトは、違っている事もあるので参考程度にしよう!
流れを参考にしながら、APIの仕様を読めば使えるはず。

- 猫でもわかるプログラミング
http://www.kumei.ne.jp/c_lang/
- Win32 API入門
http://wisdom.sakura.ne.jp/system/winapi/
- Win32 プログラミング入門
http://www7.plala.or.jp/keny01/
●Win32API(C言語)
http://www.geocities.jp/ky_webid/win32c/
7デフォルトの名無しさん:2009/03/29(日) 14:59:08
このスレッドは天才チンパンジー「アイちゃん」が
言語訓練のために立てたものです。

アイと研究員とのやり取りに利用するスレッドなので、
関係者以外は書きこまないで下さい。

                  京都大学霊長類研究所
8デフォルトの名無しさん:2009/03/29(日) 15:02:06
                      \;、
                       ,,-、、 {:{
                     《   ≫/⌒ヽ⌒H⌒/`ヽ.        これは1乙ではなく
                     ====7/⌒>‐、 ̄ ̄` 丶 、/ヽ、  _    ツインテールです
                 /:r‐-(f⌒ヽ;:_::l\ー_、   ヽ/⌒L/ハY _    
                 , ':./: >::;:'´ゝ'´::: /乂__,イ⌒)   Y´`{h_}レ'/}} _ __
               l/: :, :ヘ/:::/::////:::::!:::|:::::::( ヽ  l/い,κ≦三二__ ̄ミヽ
                  ,.':イ/ .//::::ム〈// {|::: |!: | :: !!}/〉  {、_しゝ=ニ二二二二ミ;ミ }:::}
             /: :Y   !||:::::::|心` {ト、:|_!:i::::|l::::ト〈`l  { 〈:::リ         )::ノノ
               ,':λ {    l」」_|じリ    .二:!_イトl!|こレ}: :リ‐〈::;'        /:/
                i: ハ: ',    .{ r     "了うぅァリ{こ.}ノ/〈_ノ/       //
               !::{ ヽ:.\/ハ.         ゝ_;ノ:ゝ'Lr_<ヽ::;::'        //
             ',::ヽ. .}::〈〃ハ ヽ       <://:リ7 ノ:/      //
                \ ソ:::: }ヽ : ゝ .. _ ,. ' ラ-=='´      ,.:' : /             __
                 /:/´\ー'´r‐'/`ー--、__ム`i         {{ ; :.{           .イ'⌒ヽ.、
                /:::λ{{  ::::/:ムイ::::  f´  .::::ゝ.           弋':込、__,、-=彡'    }:}
.            /::::/ r) }}` /彡'´ 9  |  / 八          ̄ ̄ ̄ ̄ ̄       /,'
.           /::::/  .(_{{./ ,ィi     /=!__,ノ/.\                        /:/
        /::::;::イ    // | ´ └=ァ /三三ニ/   _> 、               / :〃
9デフォルトの名無しさん:2009/03/29(日) 20:19:06
                   /  //           ヽ\
                     /   //     /      }\. │ヘ
                /    /   //         `│ ∧
               /     /  //   /     /   ヽ|  :∧
               ノl       f' ///   /   /_厶  \|   ',
            /イ|     |//, / // //'´ ̄|lヽ \|    }
       _    /  {{ |       |//// // /   jハ \j   │
        `  ̄   ノ '|.     |  / __/ハ     __    \ |    |
                / /ハ     | _x==ミ      ィ= =x._ イ   ∧
           / 〃ハ    | `´            `刈    ハ \
            { /'/ ハ.    |       j     f^1 / |‖  ハ \ノ
           ∨// 小.    |        `    j | j |‖  | }  ヽ
           /'´ /ノ ,l    l \    ー _一ノ ノ'´/ノ|   ド、__ _ノ  花見に行く うふふ
            〈_,斗-‐'´|   ∨ |丶、/´ ̄ ̄   //ノ|  │  `ヽ、
              /,>=-、  |    | {. /       _ イ |│  |  /⌒\
          /厶   \∧   | \l    r< ̄/ __|│  |-‐' / ̄`|
           |  \   | ヽ  !/}│    {_ `7  {_ |│  | /     |
           |    \ │    |_ノ |    い/   /│|   j'´      │
           |     \{    |\ |    ∨   /ヘ.|/  /         !
          }       \、   :|   |      V ̄ ̄ \/  /     __/
10デフォルトの名無しさん:2009/03/29(日) 21:18:21
キモイAA貼んな

クズが
11デフォルトの名無しさん:2009/03/29(日) 21:19:38
もうだめだこのスレ
12デフォルトの名無しさん:2009/03/29(日) 21:24:43
わざわざダメだとか書き込まなくていいから二度と来ないでね。
13デフォルトの名無しさん:2009/03/29(日) 22:32:37
                          刀、           , ヘ
                  /´ ̄`ヽ /: : : \_____/: : : : ヽ、
              ,. -‐┴─‐- <^ヽ、: : : : : : : : : : : : : : : : : : : : : : }
               /: : : : : : : : : : : : : :`.ヽl____: : : : : : : : : : : : : : : : : : /
     ,. -──「`: : : : : : : : : :ヽ: : : : : : : : :\ `ヽ ̄ ̄ ̄ フ: : : : :/
    /: :.,.-ァ: : : |: : : : : : : : :    :\: : : : :: : : :ヽ  \   /: : : :/
    ̄ ̄/: : : : ヽ: : : . . . . . . . . . . .、 \=--: : : :.i  / /: : : : :/
     /: :     ∧: \: : : : : : : : : : ヽ: :\: : : 〃}/  /: : : : :/         、
.    /: : /  . : : :! ヽ: : l\_\/: : : : :\: ヽ彡: : |  /: : : : :/            |\
   /: : ィ: : : : :.i: : |   \!___/ ヽ:: : : : : : :\|:.:.:.:/:!  ,': : : : /              |: : \
   / / !: : : : :.ト‐|-    ヽ    \: : : : : l::::__:' :/  i: : : : :{              |: : : :.ヽ
   l/   |: : :!: : .l: :|            \: : : l´r. Y   {: : : : :丶_______.ノ: : : : : :}
      l: : :l: : :ト、|         、___,ィ ヽ: :| ゝ ノ    '.: : : : : : : : : : : : : : : : : : : : : : /
      |: : :ト、: |: :ヽ ___,彡     ´ ̄´   ヽl-‐'     \: : : : : : : : : : : : : : : : : : イ
        !: :从ヽ!ヽ.ハ=≠' , ///// ///u /           ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
      V  ヽ|    }///  r‐'⌒ヽ  イ〉、
              ヽ、______ー‐‐' ィ´ /:/:7rt‐---、       こ、これは>>1乙じゃなくて
                  ィ幵ノ ./:/:./:.! !: : : : :!`ヽ     ポニーテールなんだから
              r‐'T¨「 |: | !:.∨:/:./: :| |: : : : .l: : : :\   変な勘違いしないでよね!
               /: : .|: :| !:.!ィ¨¨ヾ、:.:/ !: : : : l: : : : : :.\
14デフォルトの名無しさん:2009/03/29(日) 22:32:46
アリシアさんをキモイ言うな
15デフォルトの名無しさん:2009/03/29(日) 22:58:04
>>9
(*・_・*)ポッ
16デフォルトの名無しさん:2009/03/29(日) 23:01:37
キモッ
17デフォルトの名無しさん:2009/03/29(日) 23:11:07
(*). .(*)
  *   ポッ
18デフォルトの名無しさん:2009/03/30(月) 00:04:12
>>8
俺の

A 熱い

P ペニス

I インプット(挿入)   

してやるぜ
19デフォルトの名無しさん:2009/03/30(月) 00:23:53
そのまんまインサートでいいだろ、なぜインプット
20デフォルトの名無しさん:2009/03/30(月) 00:25:08
オナホールにか....
悲しすぎる
21デフォルトの名無しさん:2009/03/30(月) 00:26:07
春休みのクソガキはさっさと寝ろ
22デフォルトの名無しさん:2009/03/30(月) 00:33:24
>>21
無職のおっさんはハローワーク行けよ
23デフォルトの名無しさん:2009/03/30(月) 00:36:08
このスレ的にはinput=挿入は駄目だろ
input=入力 insert=挿入だよな
24デフォルトの名無しさん:2009/03/30(月) 01:58:17
英語をロクに知らない低学力の糞餓鬼に何を言っても無駄
25デフォルトの名無しさん:2009/03/30(月) 03:00:30
inherit = 継承

歴史は繰り返す
26デフォルトの名無しさん:2009/03/30(月) 03:11:06
インヘリット
って読むの?
27デフォルトの名無しさん:2009/03/30(月) 10:55:24
親ウィンドウの中に幾つか子ウィンドウがあって(MDI?親ウィンドウの範囲からは出られない)
その中のフォーカスがあるウィンドウハンドルが取りたいんですが、APIは何になるのでしょうか?
親のハンドル取得→子ウィンドウハンドルを1つずつとって調べればいいと思うんですが、
よく分からなくてお願いします。
28デフォルトの名無しさん:2009/03/30(月) 11:17:49
GetFocus()でとれるけど、子ウィンドウとは限らない。
WM_SETFOCUSやWM_KILLFOCUSがきたやつが親に通知して覚えておけばいいと思うけどな。
29デフォルトの名無しさん:2009/03/30(月) 11:34:10
GetFocusの返値をIsChildかSHIsChildOrSelfでチェックすればいいだろ
30デフォルトの名無しさん:2009/03/30(月) 12:06:42
>>25-26
継承はinheritance
inheritは「継承する」という動詞
31デフォルトの名無しさん:2009/03/30(月) 12:07:40
英語教師はお引取り願います
32デフォルトの名無しさん:2009/03/30(月) 12:44:10
失せろゆとり
33デフォルトの名無しさん:2009/03/30(月) 13:29:35
これが所謂春厨という現象か
34デフォルトの名無しさん:2009/03/30(月) 20:16:16
Windows上で、アプリケーションの起動など、なんらかのプロセスが起動した場合、
そのプロセスの実行ファイルとモジュールのファイルパスを確実に取得する方法を考えています。

今のところ、周期的にEnumProcesses()(プロセスID取得メソッド)から追ってパスの取得には成功
しましたが、一瞬で終わる実行ファイルなどの場合は、拾うことが不可能でした。
実行ファイルがEnumProcesses()の呼ばれる間に終了してしまうためだと思います。

環境はVisual Studio2008 になりネイティブで作成しているため、.Net Frameworkは使用できません。
Win32 APIなどで実行可能でしたら幸いです。
よろしくお願いしますm(_ _)m
35デフォルトの名無しさん:2009/03/30(月) 20:19:03
>>34
実際にやったことないので嘘かもしれないが
グローバルフックで CreateProcess のログを取る
36デフォルトの名無しさん:2009/03/30(月) 20:21:29
>>34
>プロセスが起動した場合、
>そのプロセスの実行ファイルとモジュールのファイルパスを確実に取得する方法
なんでこんなことしたいのか気になるな
37デフォルトの名無しさん:2009/03/30(月) 20:27:11
余計なお世話だ。
38デフォルトの名無しさん:2009/03/30(月) 20:27:15
>>34
ウインドウを作成しないプロセスまで捕捉するのは、簡単な方法では無いと思う。
39デフォルトの名無しさん:2009/03/30(月) 20:32:40
.NET が使えないということから
自由にソフトウェアのインストールができないPCで使うんだろう

一瞬で終わる実行を補足したいということから
CUIコマンド系の実行も調べたいんだろう

スパイですな
同僚に仕掛けるのか
出向先に仕掛けるのか
客先に仕掛けるのか

ろくなもんじゃねえ
40デフォルトの名無しさん:2009/03/30(月) 20:39:22
CUIだとどうしたらいいんだろうなー

Ntほげほげにごにょごにょしちゃえばいいのかな
4134:2009/03/30(月) 20:54:29
>>36
ありがとうございます。 調べてみます。
何か取っ掛かりが欲しかったので助かりました(^−^

>>39
純粋に仕事で必要なだけですよ。
2日ほど悩んでたんで、解決策か取っ掛かりが欲しかっただけです。
42デフォルトの名無しさん:2009/03/30(月) 21:10:00
CreateProcess あたりをフックしとけばいいんでね?
43デフォルトの名無しさん:2009/03/30(月) 22:46:36
gpedit.msc secpol.msc あたりでシステム監査有効にして
イベントログに出力されたコマンド実行履歴を取り出して
ごにょごにょしたいのですが
この辺をすべてW32APIで処理できますか
44デフォルトの名無しさん:2009/03/30(月) 22:50:03
>>34
監査でプロセスのがあったような気がする
45デフォルトの名無しさん:2009/03/30(月) 22:53:47
>>43
イベントログは普通にWin32から読み書きできる。
ポリシーをいじるのは出来るだろうけど、知らん。
46デフォルトの名無しさん:2009/03/31(火) 01:35:12
ダイアログじゃない場所にCreateWindowで貼り付けるボタンなどのフォントはどうやって変えたらいいんですか?
47デフォルトの名無しさん:2009/03/31(火) 01:42:01
ownerdraw
48デフォルトの名無しさん:2009/03/31(火) 02:44:09
フォント変えたいだけなら WM_SETFONT で十分じゃね?
49デフォルトの名無しさん:2009/03/31(火) 02:58:20
>>41
2日悩んだ程度で質問するな
一週間悩んでからにしろ
50デフォルトの名無しさん:2009/03/31(火) 08:17:24
>>49
「悩む」ってのはボーッとしてることじゃにだろうなw
51デフォルトの名無しさん:2009/03/31(火) 10:47:35
どこの方言だよ
52デフォルトの名無しさん:2009/03/31(火) 10:52:48
方言じゃないニダ
53デフォルトの名無しさん:2009/03/31(火) 11:01:36
모르면 레스하지 마세요.번거롭다 뿐입니다.
54デフォルトの名無しさん:2009/03/31(火) 13:25:33
ダイアログのコマンド・ボタン・ウインドウにツールチップを表示させてるんですが、
ウインドウが無効状態から有効状態に移るとツールチップが表示されなくなります。

何故でしょう???
55デフォルトの名無しさん:2009/03/31(火) 14:03:47
ウインドウが無効状態から有効状態に移った為です
56デフォルトの名無しさん:2009/03/31(火) 14:50:14
CreateMutexで2つ目の引数にTRUEを渡して名前付きミューテックスオブジェクトを作成場合、
既に名前付きミューテックスオブジェクトが存在していて所有権を得ることができなくても、
CreateMutexが有効なハンドルを返すのですが、どうすれば呼び出し元が所有権を得たかどうか判断できるのでしょうか。
57デフォルトの名無しさん:2009/03/31(火) 14:54:24
GetLastErrorで確認するとかWaitForSingleObject使うとか
58デフォルトの名無しさん:2009/03/31(火) 15:05:40
せめてMSDNぐらい読めよ
59デフォルトの名無しさん:2009/03/31(火) 15:10:22
GetLastError使っても、以前からミューテックスが存在していたときはERROR_ALREADY_EXISTSを返すだけで、
CreateMutexの呼び出し元が所有権を取得したかどうかまで(僕では)判断することができませんでした。
WaitForSingleオブジェクトを使うにしても、最初に所有権を取得できたかどうかでReleaseMutexを呼ぶべき回数が違ってくるので、
結局呼び出し元が所有権を取得したかどうか判断できないと話にならないと思うのですが・・・orz
60デフォルトの名無しさん:2009/03/31(火) 15:12:06
大きな勘違いをしてる
61デフォルトの名無しさん:2009/03/31(火) 15:14:18
勘違いして何が悪い
62デフォルトの名無しさん:2009/03/31(火) 15:14:44
CreateMutex直後に同じスレッドでタイムアウト0でWaitForSingleObjectを呼び出して
もし所有権を持っていなければ当然開放する必要は無い
63デフォルトの名無しさん:2009/03/31(火) 15:16:39
CloseHandleはどちらにせよ必要
64デフォルトの名無しさん:2009/03/31(火) 15:16:52
CreateMutexで2番目をtrueにした場合は所有権を得るまで処理を返ってこないだろ
65デフォルトの名無しさん:2009/03/31(火) 15:19:56
>>64
なわけねーだろバカ
66デフォルトの名無しさん:2009/03/31(火) 15:20:26
>>64
久々に馬鹿を見た
67デフォルトの名無しさん:2009/03/31(火) 15:41:09
どうも>>62でよさそうですね。ありがとうございました。

>>63
もちろん既存であるにせよ新しく作成したにせよ、
CreateMutexが有効なハンドル戻せば、閉じなければいけないことはわかっておりました。
6854:2009/03/31(火) 15:56:55
”TTS_ALWAYSTIP”付けてるのに、なぜコマンド・ウインドウが有効になると
ツールチップが表示されないのかな〜〜? 誰もわからないんだな〜〜〜
知らないのかな〜〜〜〜?
69デフォルトの名無しさん:2009/03/31(火) 15:57:37
そういう書き方されると意地でも答えたくなくなるなw
7054:2009/03/31(火) 16:03:08
たわけ者め! 釣りじゃーーーwwww
71デフォルトの名無しさん:2009/03/31(火) 16:31:01
実行時の状況しだいでは、>>62の方法も際どいことがわかってしまいましたorz
CreateMutexで所有権の取得ができなかった場合、WaitForSingleObjectの呼び出しの前に
他プロセスがミューテックスオブジェクトの所有権を解放すると、
零時間待機ではCreateMutexの呼び出しで所有権を取得したかのように錯覚してしまいますね。
72デフォルトの名無しさん:2009/03/31(火) 16:32:10
頭固いって言われるだろ
73デフォルトの名無しさん:2009/03/31(火) 16:37:53
柔らかいよりはマシだろ
74デフォルトの名無しさん:2009/03/31(火) 17:02:56
MSDN読め
75デフォルトの名無しさん:2009/03/31(火) 17:24:50
GetOverlappedResultのbWaitにTRUEを設定してもオーバーラップが終わる前に帰ってきちゃうんだけど、どういうこったい。
do bResult = GetOverlappedResult(pThis->devInfo.winUSBHandle, &pThis->ol, &dw, TRUE);
while(!bResult);
76デフォルトの名無しさん:2009/03/31(火) 17:26:01
書いてる最中で送ってしまった。。。。

下二行のdo while文はとりあえず今使ってるwhile待ち。
77デフォルトの名無しさん:2009/03/31(火) 18:05:38
do〜whileって{}が無くてもコンパイル通るんだな
初めて知ったw
78デフォルトの名無しさん:2009/03/31(火) 18:16:25
>>77
おれも。
79デフォルトの名無しさん:2009/03/31(火) 18:41:31
まさか if, else にも {} が必須なんて思ってないだろうな
80デフォルトの名無しさん:2009/03/31(火) 19:03:21
>>79
そっちは知ってんだよw
81デフォルトの名無しさん:2009/03/31(火) 19:13:44
>>79
へえーそうだったのかー知らなかったよー(棒読み)
82デフォルトの名無しさん:2009/03/31(火) 19:16:08
こんなやつらが書いたプログラム見てみたい
83デフォルトの名無しさん:2009/03/31(火) 19:18:23
>>82
C言語だけでも25年以上使ってますが何か
84デフォルトの名無しさん:2009/03/31(火) 19:19:39
知っていてもたまにしか見かけないとどっきりするよな。
C99の新機能なんかでもよく思うんだけど。
85デフォルトの名無しさん:2009/03/31(火) 19:24:12
だってさ、上のdo whileなんてそんな書き方しなけりゃ知る由も無いでしょ

大学や専門学校の授業でC言語を教わったような人なら知ってるかもしれないけど
86デフォルトの名無しさん:2009/03/31(火) 19:27:51
do 文だけ違っていたらその方が驚きだろうに
87デフォルトの名無しさん:2009/03/31(火) 19:30:39
>>86
その理屈だと↓のコンパイルが通らないとおかしい

int main() return printf("test");
88デフォルトの名無しさん:2009/03/31(火) 19:35:37
意味合いが違うだろw
89デフォルトの名無しさん:2009/03/31(火) 19:36:21
>>86
本当はdo while文を知らなかった癖にw
90デフォルトの名無しさん:2009/03/31(火) 19:37:58
な、なんでわかったんだよw
91デフォルトの名無しさん:2009/03/31(火) 19:39:50
#define { BEGIN
#define } END

ってソースを見たことがあるな・・・
92デフォルトの名無しさん:2009/03/31(火) 19:40:50
リソーススクリプト(.rc)とか普通にそうなってるだろ
93デフォルトの名無しさん:2009/03/31(火) 19:42:05
>>87
宣言は常にブラケット必須、命令文は中身が一文ならブラケットがなくてよい
と思ったんだが……
94デフォルトの名無しさん:2009/03/31(火) 19:42:06
>>91
リソースファイルも知らないの?だっせー
95デフォルトの名無しさん:2009/03/31(火) 19:44:20
> 宣言は常にブラケット必須

int main(void);
         ↑
ブラケットないね
セミコロンがついてるけど、これは空文かい?
96デフォルトの名無しさん:2009/03/31(火) 19:45:13
C99だと別な用途で{}が使えるのに何言ってんだか
97デフォルトの名無しさん:2009/03/31(火) 19:48:18
あれ、ここって何のスレだっけ?
98デフォルトの名無しさん:2009/03/31(火) 19:49:31
>>91
それってどういうときに使うの?
逆は見たことがある
99デフォルトの名無しさん:2009/03/31(火) 19:51:37
要するに紛らわしい書き方はしないに越した事は無い
特にC/C++はマクロの副作用が大きいし、一文でもブラケットを付ける癖をつけた方が余計なバグを生みにくい
100デフォルトの名無しさん:2009/03/31(火) 20:27:44
>>93
宣言じゃなくて定義ね。

C99の新機能、未だに良く知らないw
//コメントが追加、くらいしかしらん
101デフォルトの名無しさん:2009/03/31(火) 21:27:54
>>99
>一文でもブラケットを付ける癖をつけた方が余計なバグを生みにくい
人それぞれだが俺もそう思う
102デフォルトの名無しさん:2009/03/31(火) 23:23:22
>>98
別言語から入ってきた馬鹿がよくやる
103デフォルトの名無しさん:2009/03/31(火) 23:27:16
(>>75´・ω・`)アノー.....GetOverlappedResult.....

結局同期使うことにしたからまあいいけどねw
俺は特に言語を習ったことがあるとかではない(ぐーぐる先生で学んだ)けど
if elseで使えるんならいけるだろとdo whileで使ってみたら使えた…、と。
104デフォルトの名無しさん:2009/04/01(水) 00:01:56
>>102
それは #define begin { の場合でしょ?
105デフォルトの名無しさん:2009/04/01(水) 00:08:55
>>104
ツッコミのネタばらしをするなよw
106デフォルトの名無しさん:2009/04/01(水) 00:33:55
repeat ... until を使ってる人は少ない
107デフォルトの名無しさん:2009/04/01(水) 12:44:01
>>106
こんなのあったのか・・・今まで知らなかった
108デフォルトの名無しさん:2009/04/01(水) 15:23:18
そもそもその言語を使ってる人自体少ない
109デフォルトの名無しさん:2009/04/01(水) 15:30:13
いやVC2008の独自拡張でrepeat〜untilが使える
110デフォルトの名無しさん:2009/04/01(水) 15:31:06
最近の学生はPascal習わんの?
111デフォルトの名無しさん:2009/04/01(水) 15:32:02
C言語でさえ習わないよ
112デフォルトの名無しさん:2009/04/01(水) 15:35:16
VC2008でそんな拡張あるんだ。
しかし、コードの後方互換性が著しく失われるなw
113デフォルトの名無しさん:2009/04/01(水) 15:37:08
今時の学生は.NET関連ぐらいしか習わんだろ。
114デフォルトの名無しさん:2009/04/01(水) 15:47:55
スーパスカラ用の最適化ヒントにでもなるならまだしも
do whileで十分な所に変な拡張入れるなよw
115デフォルトの名無しさん:2009/04/01(水) 15:50:03
今日は・・・
116デフォルトの名無しさん:2009/04/01(水) 16:08:34
明日は・・・
117デフォルトの名無しさん:2009/04/01(水) 17:36:39
do untilならずっと前から使えるだろ
118デフォルトの名無しさん:2009/04/01(水) 19:04:50
>>109
おまwwwエイプリールフールだからって変なウソ付くんじゃねぇwwwwww
試しもせずに言いふらしちまったじゃねぇかwwwwwwww
119デフォルトの名無しさん:2009/04/01(水) 19:09:20
>>118
今日中なら、言いふらした相手に「今日は何の日だ?」って言えば許されるんじゃねww
120デフォルトの名無しさん:2009/04/01(水) 19:18:34
   ___
  |___ミ⌒ヽペタン
    |  ⌒)ノ ペタン
 ._ノ )   ((
 | .・∀|  ( 嘘ヽ
 |__|  | ̄ ̄ ̄|
  /  > . |     |
""""""""""""""""""""
121デフォルトの名無しさん:2009/04/01(水) 19:18:34
>>118もエイプリルフールのネタかもしれんぞ。

その論調でいけば俺も>>119に騙されてしまった事になるのかもしれんが。
122デフォルトの名無しさん:2009/04/01(水) 19:19:02
>>118
エイプリールフール以前に2ちゃんの情報を鵜呑みにするお前が悪い
123デフォルトの名無しさん:2009/04/01(水) 19:21:00
2chは年中エイプリールフールだよ
124デフォルトの名無しさん:2009/04/01(水) 19:34:41
ひろゆき「うそはうそであると見抜ける人でないと(掲示板を使うのは)難しい」
125デフォルトの名無しさん:2009/04/01(水) 20:31:37
VCにはforeachが効いた前科があるからなw
126デフォルトの名無しさん:2009/04/01(水) 20:46:00
__declspec(property)とかも随分前からあるし今に始まった事ではないだろ
127デフォルトの名無しさん:2009/04/01(水) 23:55:52
>>48
ありがとうございます
128デフォルトの名無しさん:2009/04/02(木) 01:36:15
#define repeat do
#define until while!
129デフォルトの名無しさん:2009/04/02(木) 10:14:54
http://www.geocities.jp/katayama_hirofumi_mz/mspaint/

印刷関係がまだできていません。どうしたらよいでしょうか?
サンプルコードなど、ありませんか。
130デフォルトの名無しさん:2009/04/02(木) 10:16:30
age
131デフォルトの名無しさん:2009/04/02(木) 10:18:12
SDKのサンプルにくさるほどあると思うが、、、
とりあえずDPI気にしないでプリントしてみそ
132デフォルトの名無しさん:2009/04/02(木) 15:19:46
外部プロセスのサスペンドとレジュームを行うAPIがあれば教えてください

目的は
録画サーバの空き時間にエンコードを行い
録画が始まったら直ちにエンコードしているプロセスを一時停止させ
録画終了したらエンコードの再開させるためです

よろしくお願いします
133デフォルトの名無しさん:2009/04/02(木) 15:23:48
MSDN探してから質問しろボケ
134デフォルトの名無しさん:2009/04/02(木) 15:24:41
SuspendThread()/ResumeThread() ってのがあるけど、
使えるかどうかわからん。
135デフォルトの名無しさん:2009/04/02(木) 15:28:44
エンコーダを自作すればおk
136132:2009/04/02(木) 15:56:09
とりあえずコレを使うことにします

PsSuspend
ttp://technet.microsoft.com/en-us/sysinternals/bb897540.aspx
137デフォルトの名無しさん:2009/04/02(木) 16:02:50
もはやAPIですらないな・・・
138デフォルトの名無しさん:2009/04/02(木) 16:09:40
>>136 ってどうやって実装してるんだろう?って話になるだろ。
Windows API の話じゃあないか。
139デフォルトの名無しさん:2009/04/02(木) 16:24:12
そうか?
140デフォルトの名無しさん:2009/04/02(木) 16:29:29
どうでもいいよ
141デフォルトの名無しさん:2009/04/02(木) 17:21:35
Windowsプログラミングを体系的かつ実践的に解説してあるサイトってありますか?
猫でものサイトより高度な内容を希望。
142デフォルトの名無しさん:2009/04/02(木) 17:28:24
>>141
スレ違いな気が

言語と開発ツールは何なのさ?
143デフォルトの名無しさん:2009/04/02(木) 17:35:24
>>142
VB#
VisualStudio2012Express
144デフォルトの名無しさん:2009/04/02(木) 17:36:01
145デフォルトの名無しさん:2009/04/02(木) 17:36:08
わかった
2012年までに作っておく
146デフォルトの名無しさん:2009/04/02(木) 17:47:38
VS2012って、確かEclipseのパースペクティブとして提供されるっていう話だよね。








・・・スマン、もう4/1じゃないんだった
147デフォルトの名無しさん:2009/04/02(木) 18:45:59
Yahoo!Widgetみたいな形の自由な半透明のウィンドウを出したいんですけど、どうすればいいですか?
148デフォルトの名無しさん:2009/04/02(木) 18:47:19
>>145
本当に作るんだろうな?
そう書いたからには実行してもらうよ
149デフォルトの名無しさん:2009/04/02(木) 19:05:13
>>147
ポイントとなるAPIだけ提示しとく。
形の自由なウィンドウ・・・SetWindowRgn
半透明・・・SetLayeredWindowAttributes
150デフォルトの名無しさん:2009/04/02(木) 19:06:24
作ってみた。

<frameset>
<frame src="http://msdn.microsoft.com/en-us/library/aa139722.aspx">
</frameset>
151デフォルトの名無しさん:2009/04/02(木) 19:44:20
>>149
UpdateLayeredWindowだろ半可通が知ったような口を聞くな
152デフォルトの名無しさん:2009/04/02(木) 19:53:43
>>151
2000以降でしか使えないようなAPIを知ってるぐらいで自慢するなカス
153デフォルトの名無しさん:2009/04/02(木) 20:14:56
はいはいw
154デフォルトの名無しさん:2009/04/02(木) 20:16:38
はいはいはいww
155149:2009/04/02(木) 20:22:41
なんか変な流れになっちゃったな。
確かに調べてみたら、UpdateLayeredWindow の方がよい情報が多かった。
俺も不勉強だったよ、済まなかった。
156デフォルトの名無しさん:2009/04/02(木) 20:46:05
Win98のころSetWindowRgnでアニメーションする
ウインドウ作ったらちらついて使い物にならなかった
WM_ERASEBKGNDとかで何とかなったのかな?
157147:2009/04/02(木) 21:32:16
助言ありがとうございます。実際の手順は
例えば、画像の透過ピクセル以外の形のウィンドウを作りたい時は
ビットマップからリージョンを作ってSetWindowRgnをする。更に半透明を反映させるために
UpdateLayeredWindowをする。ということでいいでしょうか?やってみます。
タイトルバーなどは、リージョン設定時にクライアント領域だけ収まるように設定すればいいんですか?
158デフォルトの名無しさん:2009/04/02(木) 21:46:02
>>156
それはお前の書き方が悪いだけだろ。
159デフォルトの名無しさん:2009/04/02(木) 21:52:43
LayerdWindowの無いWin9x系でそれやるのは無謀。
160デフォルトの名無しさん:2009/04/02(木) 22:06:30
非矩形ウィンドウだけならSetWindowRgnだけでも充分可能だろ
透明度を設定するならレイヤードウィンドウじゃないと無理だけどな
161デフォルトの名無しさん:2009/04/02(木) 22:20:20
>>132
それってそんなに複雑なことをする必要があるかな?
単にエンコードプロセスを最低レベルの優先度で実行してればいいんじゃないのかな?
かな?
162デフォルトの名無しさん:2009/04/02(木) 22:25:37
つーかエンコード用と録画用にPCを分ければいいだろ
163デフォルトの名無しさん:2009/04/02(木) 22:33:16
NtSuspendProcessかませ
164デフォルトの名無しさん:2009/04/02(木) 22:49:33
プロセス内の全スレッドを列挙→SuspendThreadってプログラム書いたことある。
165デフォルトの名無しさん:2009/04/02(木) 23:01:58
チップセット・マザーボード・cpuの名前とかの情報を取得する関数はありますか?
166デフォルトの名無しさん:2009/04/02(木) 23:07:37
レジストリから取得しろ
167デフォルトの名無しさん:2009/04/02(木) 23:07:43
>>165
WMI
168デフォルトの名無しさん:2009/04/03(金) 00:28:23
>>165
GetChipsetMotherBoardCPUNameToka();
169デフォルトの名無しさん:2009/04/04(土) 00:38:39
Win32でファイルのアペンドオープンをしたいと思っています。
OPEN_ALWAYSでCreateFileを呼び出して、そのあとに
SetFilePointer(FILE_END)を呼び出したら、文字列を追加書き
込みできるようになったのですが、なぜか文字列の表示がおか
しくなります。
普通だったら、abcと表示されるはずなのに、a b cのように
文字間に空白が入ってしまうのです。
何が原因でしょうか。
170デフォルトの名無しさん:2009/04/04(土) 00:40:35
>>169
Unicode?
171デフォルトの名無しさん:2009/04/04(土) 01:13:47
Unicodeで保存してシフトJISで開くとそーなる。
172169:2009/04/04(土) 01:38:22
ありがとうございます。
おっしゃる通り、UNICODEで実行しています。
とりあえず、コードを載せます。

#include <stdio.h>
#include <windows.h>
int main(int argc, char *argv[])
{
HANDLE hFile;
TCHAR data[]=TEXT("abc\r\n");
DWORD dw;
hFile=CreateFile(TEXT("file.txt"), GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
if (hFile==INVALID_HANDLE_VALUE){
printf("error\n");
return 0;
}
SetFilePointer(hFile, 0, NULL, FILE_END);
WriteFile(hFile, data, sizeof(data), &dw, NULL);
return 0;
}
これを実行してみると、一回目は普通にabcと保存されます。
そして、もう一度実行してみると、一回目の文字列の後ろに
abcは追加されているのですが、何故かa b c a b c のように
なってしまいます。
本当は、
abc
abc
と表示されてほしいのですが、そうなってくれません。
メモ帳で中身を確認しているのですが、それが問題でしょうか。
173デフォルトの名無しさん:2009/04/04(土) 01:42:32
メモ帳の「ファイルを開く」で一番下に文字コードの指定があるよ
Unicodeで開いてみ
174169:2009/04/04(土) 02:01:28
ありがとうございます。無事、確認できました。
UNICODEで保存すると色々と複雑になるようなので、
ANSI(ASCII?)で保存するようにしたほうがよいので
しょうか。
あと、先ほどのコードで改行が、
abc
abc
のようになったのですが、2行目の先頭に空白が
あるのがわかりません。
改行は、\r\nでいいはずなのですが。
175デフォルトの名無しさん:2009/04/04(土) 02:06:20
ANSIというかCP932 (Shift_JIS)で保存させたいなら、
Win32APIなんて使わず<stdio.h>と<tchar.h>で、_fputtsや_ftprintfなんかを使ったほうが楽だと思うよ。
176デフォルトの名無しさん:2009/04/04(土) 02:08:39
>>172
とりあえずバイナリエディタで確認しろ
177169:2009/04/04(土) 02:31:55
すいません、なぜか妙なことになってきました。
バイナリエディタで確認したところ、
abc\r\nを表すのが、
61 00 62 00 63 00 0D 00 0A 00
であることがわかりました。
この後には、00 00があったのですが、どうやらこれはヌル文字のようです。
WriteFileにsizeof(data)としていたため、ヌル文字も保存されてしまったようです。
よって、sizeof(data) - sizeof(TCHAR)としたところ、今度はUNICODEでメモ帳を
開かなくても
abc
abc
と表示されるようになりました。
むしろ、ありがたい結果なのですが、いったいなぜ...?
178デフォルトの名無しさん:2009/04/04(土) 02:37:13
余計なNULLがあったから。
179デフォルトの名無しさん:2009/04/04(土) 02:44:13
ANSI で abc\r\n がバイナリでどう表現されるか、チェックしてみると解る
180デフォルトの名無しさん:2009/04/04(土) 02:49:37
::WriteFile( hFile, data, ::lstrlen(data)*sizeof(TCHAR), &dw, NULL);
181デフォルトの名無しさん:2009/04/04(土) 03:01:46
つーかunicodeで保存するならBOM付けろよ
182デフォルトの名無しさん:2009/04/04(土) 03:07:55
爆弾?
183169:2009/04/04(土) 03:08:51
ANSIとしてコードを実行し、バイナリで確認したところ、
61 62 63 0D 0A
のような結果を確認しました。
UNICODEとの違いは、00があるかどうかという点ですが、
次のように考えてよいでしょうか。

その1:エディタは、連続的な00によって、UNICODEかどうかを区別する。
その2:ヌル文字を保存したら、00が変則的に存在することになり、
エディタがコード体系を理解できず、すべての文字を1つずつ表示する。
184デフォルトの名無しさん:2009/04/04(土) 03:10:09
WindowsでUnicodeを表現するために用いられているWCHAR型は
typedefされたunsigned short型でサイズは16ビット
intel系CPUでの数値の表現方法はリトルエンディアンであるから
'a'、すなわちUnicodeでは0x0061という値をメモリに格納すると61 00となる

こんな当たり前のこと何一生懸命書いてるんだバーカ
という煽りが聞こえてきそうだ
ああ自己嫌悪・・・
185デフォルトの名無しさん:2009/04/04(土) 03:22:06
>その1:エディタは、連続的な00によって、UNICODEかどうかを区別する。
そんな単純なものじゃない。この理屈なら、ANSI (シフトJIS) の 2バイト文字が存在できないだろ。
186169:2009/04/04(土) 03:31:03
確かにそうですね。
IsTextUnicodeとかいう関数があるぐらいですから、
UNICODEの判定は難しそうです。
とりあえず、a b c 問題の原因は、ヌル文字の保存が原因なようなので、
今後は、lstrlen(data)*sizeof(TCHAR)のようにしたいと思います。

それにしてもこのスレは良スレですね。
夜分遅く色々とありがとうございました。
187デフォルトの名無しさん:2009/04/04(土) 07:14:33
この程度のことならWindows APIじゃなくfopenでも十分のような
コンパイラがVC++なら
1.プロジェクトを作ってマルチバイト文字セットにする
2.fopen(hoge, "at")で開いて書き込む
で十分
Unicode?何それ、おいしいの?
188デフォルトの名無しさん:2009/04/04(土) 10:53:15
>>186
まだ理解してないね。
あんたがお礼を言うのは>>184のレスだ。
189デフォルトの名無しさん:2009/04/04(土) 13:42:29
http://www.geocities.jp/katayama_hirofumi_mz/mspaint/

印刷はできるようになりましたが、印刷プレビューがまだできません。
どうしたらよいでしょうか?
190デフォルトの名無しさん:2009/04/04(土) 13:49:32
>>187
似たようなことは既に言われている>>175
191デフォルトの名無しさん:2009/04/04(土) 15:08:13
WCHAR型はtypedefされたwchar_t型だろ

unsigned short型とかいつの時代の話だよ
192デフォルトの名無しさん:2009/04/04(土) 17:51:25
PdhGetFormattedCounterValue使ったらPDH_CALC_NEGATIVE_DENOMINATORが返ってきた。
どういうことでしょうか?
193デフォルトの名無しさん:2009/04/04(土) 17:56:12
TextOutWではUTF-8を描画できませんか?
194デフォルトの名無しさん:2009/04/04(土) 17:59:20
>>193
できない
195デフォルトの名無しさん:2009/04/04(土) 18:04:21
そもそも TextOutW なんつう API は存在しない
196デフォルトの名無しさん:2009/04/04(土) 18:09:53
APIはあるだろ
197デフォルトの名無しさん:2009/04/04(土) 18:14:02
無いよバーカ
198デフォルトの名無しさん:2009/04/04(土) 18:16:43
TextOutAではUTF-8を描画できませんか?
199デフォルトの名無しさん:2009/04/04(土) 18:19:41
UTF-8はSJISかUTF-16に変換して
〜Aか〜Wに渡すしかねーんじゃね?
200デフォルトの名無しさん:2009/04/04(土) 18:23:40
綺麗に描画出来ますよ。あまりの美しさに感動
201デフォルトの名無しさん:2009/04/04(土) 18:24:18
>>200
バーカ
202デフォルトの名無しさん:2009/04/04(土) 18:33:45
>>195
>WinGDI.h
>__gdi_entry WINGDIAPI BOOL WINAPI TextOutW( __in HDC hdc, __in int x, __in int y, __in_ecount(c) LPCWSTR lpString, __in int c);

>>198
UTF8を使うなら、UCS2に変換してTextOutWを使えばいいだけ。
バイト構造を変換するだけなんだから大した労力でもない。
203デフォルトの名無しさん:2009/04/04(土) 18:34:21
>>195
APIとして存在しなくても、gdi32.dllにそういう名称でエントリポイントが存在するのだから、
そうギスギスした返事を返さなくてもいいでしょ。
204デフォルトの名無しさん:2009/04/04(土) 18:53:53
>>203
エントリポイントという言葉の使い方が間違ってるよ
やっぱり馬鹿なんだね
205デフォルトの名無しさん:2009/04/04(土) 19:08:47
>>203
馬鹿はレスしないて下さい。迷惑です。
206デフォルトの名無しさん:2009/04/04(土) 19:36:56
バーカバーカ バーカバーカ バーカバーカ
207デフォルトの名無しさん:2009/04/04(土) 19:42:56
もうだめだこのスレ
208デフォルトの名無しさん:2009/04/04(土) 20:10:13
もうダメだこのスレ
Windows内部はUTF-16って誰か知ってんのか?
それ知ってるだけでやるべきことは導かれ、
Windowsにおける文字列操作の不毛な議論は要らんのだが。
209デフォルトの名無しさん:2009/04/04(土) 20:17:47
もうぜんぶUNICODE_STRING型を使うでOKだろ…この議論はさ
210デフォルトの名無しさん:2009/04/04(土) 20:30:30
WindowsでUnicode文字セットと言われてるのは
UTF-16っつか、正確にはUCS-2
211デフォルトの名無しさん:2009/04/04(土) 20:30:56
9x系も内部Unicodeだっけ?NT系のみは勘違い?
212デフォルトの名無しさん:2009/04/04(土) 20:37:46
9x系は部分的にUnicodeだろ
213デフォルトの名無しさん:2009/04/04(土) 20:43:15
ttp://ja.wikipedia.org/wiki/Unicode
Windows XPなどの近年のOSの内部では、UTF-16符号化形式が使われている。UCS-2ともBMPの範囲で互換性がある。
Windowsのメモ帳で作成した「Unicodeテキスト」はBOMが付与されるようになっている。

正確にはUTF-16でいいようだ
214デフォルトの名無しさん:2009/04/04(土) 20:43:38
9xはCOM関係のインタフェースだけUnicodeで
その他はマルチバイトじゃないの?
別途配布されてるMicrosoft Layer for Unicode という
ランタイムをインストールすると無理やり 〜W のunicode APIが使えるようになるとか
(試したことはないけど)
215デフォルトの名無しさん:2009/04/04(土) 20:44:41
>>210
Windows 2000のあたりからUTF-16対応と言われる気がする。
その辺りから本格的にサロゲートペアに対応するようになったのかなと思おう。
216デフォルトの名無しさん:2009/04/04(土) 20:49:06
9x系はCOMとファイルシステムと一部のマルチメディアAPIはUnicodeで、それ以外はANSI
NT系はNT4までがUCS-2で、2000以降では一部のAPIをUniscribeに転送して表面上はUTF-16
217デフォルトの名無しさん:2009/04/04(土) 20:50:40
>>214
TextOutWなんかはWindows 95から使える。
ほかにもIME関係が98/Meで正式対応とか。
http://msdn.microsoft.com/en-us/library/ms813063.aspx
まあ、MS-IMEもATOKも、95ではプライベートメッセージでUnicode使えるらしい。
218デフォルトの名無しさん:2009/04/04(土) 20:53:24
何気にlstrlenWとか使えるんだよなw
219デフォルトの名無しさん:2009/04/04(土) 20:53:48
>>214
それこそ件のTextOutWとか、Win9xでも正常にUCS-2/UFT-16を扱えるAPIがいくつか存在する。

OS内のネイティブは9xがMBCS、NT系がUCS-2/UTF-16なんで、NT系でTextOutAとか使うと変換が入ることになるが
220デフォルトの名無しさん:2009/04/04(土) 20:54:08
ビッグエンディアンの符号化スキームをUTF-16BE、
リトルエンディアンの符号化スキームをUTF-16LEとして区別することもある。
MIMEなどの手段で符号化スキームにUTF-16BEやUTF-16LEを指定している場合には
BOMを付与することは許容されない(ZERO WIDTH NON-BREAKING SPACEとして扱う)。
Windows上の文書における「Unicodeテキスト」は特に明記のない場合、
リトルエンディアンのUTF-16符号化スキームのことを指す。

更に厳密にいえばUTF-16LEか
221デフォルトの名無しさん:2009/04/04(土) 20:56:23
>>219
だからファイルシステム関連は9xでもUnicodeだって
APIを経由するときに変換が入る
222デフォルトの名無しさん:2009/04/04(土) 21:01:11
>>208以降
スレ違い。ウザイし邪魔。
223デフォルトの名無しさん:2009/04/04(土) 21:03:32
エンディアンはプロセッサによって違うわけだから
Windows内部の文字コードは厳密にUTF-16。
224デフォルトの名無しさん:2009/04/04(土) 21:06:45
Windows内部はUTF-16(笑)

なんか頭悪そう
225デフォルトの名無しさん:2009/04/04(土) 21:11:16
馬鹿ばっか
226デフォルトの名無しさん:2009/04/04(土) 21:16:30
      `i;;;;;;;;;::'''      .....::.;;;;;;;;;;;;;;;;;;;;;;;;i
       ''''''/ U      .......::::::::;;;;;;;;;;;;;;;l、
        /  ,__ 、___::::::::::;:::;;;;;;;;;;;;;;i
       ⊥ _ f ‐._´`i ̄ ̄ ̄ ::::::: r´ `i,;;;;;;,l
      r´. l_,.,i t, "~’j     ::  ヽ, .l;;;;;;i  やっべ・・・スイッチ押しても飛ばねぇ
      'i、 |'~ノ ,ヾ-‐´       l ィ´, ノ;;;;l、
      `-+イ、,・ .)、  U    `;- ´ ;;;;;;;j
.       `::ノ ,=--、ヽ         /';、
        `i 、==‐フ        ,/   ヽ--―--、
         `i、"´   ノ    .ィ´    _.ィ´   ,,>ー-、_
227デフォルトの名無しさん:2009/04/04(土) 21:21:55
で、結局WindowsAPIにUnicode渡すとき、どうすれバインダー
BOM付けていいの?
ビッグエンディアンなCPUだったらUTF-16BEに変換していいの?
228デフォルトの名無しさん:2009/04/04(土) 21:36:46
>>227
BOMは付けず、WCHARの配列を渡す。それでいいじゃないか。
229デフォルトの名無しさん:2009/04/04(土) 21:37:35
ダメだよ。
230デフォルトの名無しさん:2009/04/04(土) 21:43:30
>>192 please!
231デフォルトの名無しさん:2009/04/04(土) 22:44:39
help me!
232デフォルトの名無しさん:2009/04/04(土) 23:32:43
192は解決しました。しかし、今度はCPU使用率が100%しか返ってこなくなりました。
タスクマネージャでは20〜30%なんですが・・・

  HQUERY query;
  HCOUNTER counter;
  PDH_FMT_COUNTERVALUE value;

  ::PdhOpenQuery(NULL,0,&query);
  struct end{
    HQUERY query;
    ~end(){
      ::PdhCloseQuery( query );
    }
  }e;
  e.query = query;
  ::PdhAddCounter( query,TEXT("\\Process(現在のプログラム名から.exeを除いたもの")\\% Processor Time"),0,&counter );
  ::PdhCollectQueryData(query);
  ::Sleep(1000);
  ::PdhCollectQueryData(query);
  ::PdhGetFormattedCounterValue( counter,PDH_FMT_DOUBLE, NULL,&value );

  return value.doubleValue;
233デフォルトの名無しさん:2009/04/05(日) 01:50:11
で?
234デフォルトの名無しさん:2009/04/05(日) 03:04:12
でで?
235デフォルトの名無しさん:2009/04/05(日) 09:41:25
クリックなどを受け流して、ウィンドウは見えるんだけど存在していないように
みせかけたいんですが何かいい関数ありますか?
例えばウィンドウ上をクリックされても反応せずそのまま一つ奥にあるソフト
にクリックがいくみたいな感じ
一つ後ろにあるソフトのハンドル調べて来たメッセージ送るしかない?
236デフォルトの名無しさん:2009/04/05(日) 10:00:06
WS_EX_TRANSPARENT
237デフォルトの名無しさん:2009/04/05(日) 10:17:58
おおありがとう。これだよこれ、こんなのまであったのか
238デフォルトの名無しさん:2009/04/05(日) 12:21:06
>>233-234
知らないn・・・・
いや、どうすれば正しい値が取得できるのか教えてほしいんです。
239デフォルトの名無しさん:2009/04/05(日) 12:41:22
少なくともうちの環境じゃ上記コードで問題ないように見えるぜ
(vista sp1 + admin + uac無効)
240デフォルトの名無しさん:2009/04/05(日) 14:05:05
http://www.geocities.jp/katayama_hirofumi_mz/mspaint/

囲みとテキスト挿入ができるようになったじょ〜
印刷プレビュー難しすぎるよ、教えてくれよぉ〜
241デフォルトの名無しさん:2009/04/05(日) 14:26:25
印刷プレビューはMFCのCViewにあるやつを使うか
プリンタのデバイスコンテキストから情報を集めて自力で作るかだな
242デフォルトの名無しさん:2009/04/05(日) 14:29:44
>>241
そいつは荒らしだからスルーしとけ
>>129>>189>>240
243デフォルトの名無しさん:2009/04/05(日) 14:41:41
質問させてください
デスクトップや他のソフトのウィンドウ上に線や四角形を描画したいのですが方法がわかりません
自分で作成したウィンドウであれば描画はできるようになりました
使用する関数などヒントを教えていただけませんか
244デフォルトの名無しさん:2009/04/05(日) 14:44:27
デスクトップ全体に透明なウィンドウを作る
245デフォルトの名無しさん:2009/04/05(日) 14:55:07
>>239
あら?今普通にコンソールでやったら、うまく行きました・・・。
もしかして、SetSystemTimeAdjustmentとかやってるとダメとかですか?
なんかこれやったら100になるんですが・・・
246デフォルトの名無しさん:2009/04/05(日) 14:55:15
すまん質問させてくれ
今サービスと連携するアプリ作っていて

サービス内でファイルマッピング作成、それを用いてやり取りを当初考えていたんだが
System権限で実行される為か、連携アプリ側ではサービス側で作成したマップが開けない

連携に何か良い方法とかないかな?
247デフォルトの名無しさん:2009/04/05(日) 15:04:09
パイプカット
248デフォルトの名無しさん:2009/04/05(日) 15:10:50
Dynamic Data Exchange
249デフォルトの名無しさん:2009/04/05(日) 15:21:45
連携アプリをSystem権限に昇格
250デフォルトの名無しさん:2009/04/05(日) 15:50:21
サービスから他のアプリ起動した時ってそのアプリの画面表示されたっけか?
251デフォルトの名無しさん:2009/04/05(日) 15:52:52
それは対話を有効にする、のチェックいれてりゃできるけど
今回のとは違う話じゃ?
252デフォルトの名無しさん:2009/04/05(日) 15:54:35
□ デスクトップとの対話をサービスに許可
でした
253デフォルトの名無しさん:2009/04/05(日) 16:06:42
>>246
サービス側できっちりアクセス権を指定しとけばOK。
254246:2009/04/05(日) 16:23:28
みんなありがとっ
パイプはマッピングどうしてもうまく行かない時に試して見る
DDEは分からないから、最終手段にしてみる

>>253
サービス側って事はCreateServiceでサービスを登録する時に
サービスのアクセス権を指定するって事かな?
255デフォルトの名無しさん:2009/04/05(日) 16:28:04
>>246
セッションを跨いでいるからだめという原因なら、
マッピングオブジェクトの名前にGlobal\を前置するというのはやった?
256デフォルトの名無しさん:2009/04/05(日) 18:15:42
>>254
違う。CreateFileMapping でファイルマッピングオブジェクトを作るときに、
SECURITY_ATTRIBUTES を指定する。
257デフォルトの名無しさん:2009/04/05(日) 18:18:17
245ですが、うちのPCは時間解像度がデフォで156250nsecでした。
1ミリ秒で時間を使いたいからSetSystemTimeAdjustmentで10000nsecに設定してるんですけど、
これとCPU使用率の計測をうまく両立させることってできないんですかね?
258デフォルトの名無しさん:2009/04/05(日) 19:09:08
>>257>>232
独り言は日記帳へどうぞ
259デフォルトの名無しさん:2009/04/05(日) 21:01:41
?
260246:2009/04/05(日) 21:06:44
>>255
試してみた
でも、やっぱりERROR_ACCESS_DENIEDが発生する

>>256
単純にSECURITY_ATTRIBUTESのアドレスを渡すだけではないよね?
CreateFileMappingに渡す時のSECURITY_ATTRIBUTESがどのような状態にすればいいのか分からない
無知で申し訳ない
261デフォルトの名無しさん:2009/04/05(日) 21:30:40
クライアント側でCreateして(もちろんGlobal\\で)サービス側でOpen
だったら特に障害なく動作するけどさすがにこのレベルで作り直すのはめんどくさいよな、たぶん
262デフォルトの名無しさん:2009/04/05(日) 21:46:12
>>260
回答でてる気もするが・・・
やり方忘れたけど、サービス系の場合次のような処理が必要だった希ガス。間違いだったらスマソ
1. 対話を有効
2. 特定ユーザーのデスクトップ領域取得
3. 実行
263デフォルトの名無しさん:2009/04/05(日) 21:48:53
それは窓メッセージをやり取りする(UIを表示させたり)する場合じゃなかったっけ?
264デフォルトの名無しさん:2009/04/05(日) 22:01:42
セッション0の分離でも関係してるんじゃねーの?
265246:2009/04/05(日) 22:24:21
長々付き合って貰って申し訳ない

>>261
サービスは常に起動状態で、後は連携アプリでいつでも操作っていうのを想定してたから
かなり作り直すことになるかも・・・

System権限でDLLを開かれると、そのDLLがロックされって事は無いと思うんで
サービスと連携の間にDLLを置いて対応出来ないかをちょっと試して見ます
266デフォルトの名無しさん:2009/04/05(日) 22:24:37
質問です

VisualStudio 2008 Express Edition で、
自分のウィンドウに「AtlAxWin」の様なIEコンポーネントを張りつけたソフトを作りたいのですが、
ATLを使わずにこれを実現するにはどうしたらよろしいでしょうか?

宜しくお願いします。
267デフォルトの名無しさん:2009/04/05(日) 22:31:34
>>266
自分も、前にそれをやろうとしたことがあって、これを参考にした。
http://www.adp-gmbh.ch/win/misc/mshtml/HTMLWindow.html
けど、これもかなり無茶苦茶なコード、QueryInterfaceの関係が酷すぎるのを覚悟して。
268デフォルトの名無しさん:2009/04/05(日) 22:39:33
DDKのATLを参考にして勉強するのが早い気がする
269デフォルトの名無しさん:2009/04/05(日) 22:42:19
メニューを選択する処理をコードで書くにはどうすればよいでしょうか?
270266:2009/04/05(日) 22:49:36
>>267 >>268
即レス感謝します

そのサイトは大変参考になりそうですね
DDKはまだ、自分には未開の地ですが、少し勉強してみたい思います

ありがとうございました
271デフォルトの名無しさん:2009/04/05(日) 22:50:48
何をしたいのかによる。とりあえず WM_MENUSELECT
272デフォルトの名無しさん:2009/04/05(日) 23:03:28
>>271
ありがとうございます。
自分が勉強不足なのですが、マウスでメニューを選択した時に出るメッセージを
コード上で発生できないか調べていました。
273デフォルトの名無しさん:2009/04/05(日) 23:06:49
>>272
もし、選択というのがクリックのことであれば、
単にSendMessageでWM_COMMANDを送りつけるだけで十分ということにならないかな?
274デフォルトの名無しさん:2009/04/05(日) 23:08:36
わざわざATLを使わずCOM関連弄りたいなんて馬鹿かドMだろ
275デフォルトの名無しさん:2009/04/05(日) 23:13:19
>>272
Spy++使ってるか?
276デフォルトの名無しさん:2009/04/05(日) 23:20:36
>>273
それでできました!ありがとうございます。
>>275
Spy++ですか?VC++9 Expressには入っていないみたいです。
277デフォルトの名無しさん:2009/04/05(日) 23:57:46
>>276
>VC++9 Expressには入っていないみたいです。
なら、↓のソフトを持っておけ。いつか役に立つ。
http://www.windows-spy.com/
278デフォルトの名無しさん:2009/04/06(月) 00:04:23
Standardでも買え
279デフォルトの名無しさん:2009/04/06(月) 01:50:16
どうでもいいけどSpyってPlatformSDKに入ってなかったか?
昔の話だっけ
280デフォルトの名無しさん:2009/04/06(月) 02:22:33
SpyとSpy++は別物。
……Spyってどんなツールだったっけ?
281デフォルトの名無しさん:2009/04/06(月) 02:30:07
SDKのSpy++はUISpyってのに置き換えられたっていう話が出てきた
これの事かな〜
282デフォルトの名無しさん:2009/04/06(月) 03:54:51
SDKのSpy++なんてねーよ
283デフォルトの名無しさん:2009/04/06(月) 06:46:43
>>260
InitializeSecurityDescriptor() しただけの空の SECURITY_DESCRIPTOR を指定して、
SECURITY_ATTRIBUTES のサイズ指定も忘れずに。

これだと、何でも OK の指定だから、その辺は気をつけてね。
284デフォルトの名無しさん:2009/04/06(月) 07:10:04
>>277
ありがとうございます。使ってみます。
285デフォルトの名無しさん:2009/04/06(月) 08:37:17
>>277
ありがとうございます。使ってみます。
286デフォルトの名無しさん:2009/04/06(月) 10:18:21
>>243
HWND hWnd = GetDesktopWindow();
HDC hdc = GetWindowDC(hWnd);
...
ReleaseDC(hWnd, hdc);
287246:2009/04/06(月) 12:03:18
>>283
有難うございます。是非とも試して見ます。
質問ばかりなのに答えて頂き本当に有難うございました。
288デフォルトの名無しさん:2009/04/06(月) 12:15:45
Advanced Windows5版を買って来て読んでるのだが・・・
難解な言い回しでなかなか理解できません。
Win32APIでソフト作りたいんですけど、
何から手を付けたら良いでしょうか。
289デフォルトの名無しさん:2009/04/06(月) 12:18:16
Hello Windows
290デフォルトの名無しさん:2009/04/06(月) 12:20:18
>>288
Advanced Windwsは入門者向けじゃないぞ

>>6の入門サイトをテキトーに回るか
書籍なら、プログラミングWindowsで良いんじゃない?
291デフォルトの名無しさん:2009/04/06(月) 12:50:59
- Win32 API入門
http://wisdom.sakura.ne.jp/system/winapi/

内容も濃く、良サイトみたいですが、2000年で更新止まってないですか?
292デフォルトの名無しさん:2009/04/06(月) 12:57:29
291はつまり、
2000年から今までの間にWin32APIの仕様は変わってるんだから使い物になるわけねーだろ
と言いたいってことでおk?
293デフォルトの名無しさん:2009/04/06(月) 13:19:21
>>292
違います。Windowsの根本は何も変わってません。
10年経った今も十分通用する基本的解説だと思ってます。
294デフォルトの名無しさん:2009/04/06(月) 13:26:34
じゃあ更新されてなくてもいいじゃない
295デフォルトの名無しさん:2009/04/06(月) 14:17:29
>>294
そういうことです。
296デフォルトの名無しさん:2009/04/06(月) 16:33:54
Windowsの根本は何も変わってないってねぇ
冗談のつもりなのか?
297デフォルトの名無しさん:2009/04/06(月) 16:46:15
Yes Joke
298デフォルトの名無しさん:2009/04/06(月) 16:50:19
296はつまり、
2000年から今までの間にWin32APIの仕様は変わってるんだから使い物になるわけねーだろ
と言いたいってことでおk?
299デフォルトの名無しさん:2009/04/06(月) 17:21:05
根本は変わっているかも知れんが
使用できるAPIはほとんど残ってる

が正解

実際XP対応ソフトなら98以降が動作環境対象だ
300デフォルトの名無しさん:2009/04/06(月) 17:26:35
>>299
いやいやいや、
言っていることは100%同意するが、現実は要2000以降のアプリが多いぞ。
結構みんなW版使っているんじゃないかな?
301デフォルトの名無しさん:2009/04/06(月) 17:37:23
外部プログラムの目的のEditがフォーカス(アクティブ?)されているかどうかって
GetForcusやフォアグランドウィンドウで分かるんですかね?
うまくいかなくて、つかってるAPIが間違ってるかどうか教えてください。
302デフォルトの名無しさん:2009/04/06(月) 17:41:52
フォーカスってのはキーボードフォーカスのこと
キーボードからの入力を受け取るのは基本的に1つだからね。
で、GetFocusでいけるとおもうけど、どううまくいかないの?
303デフォルトの名無しさん:2009/04/06(月) 17:43:36
プロセス(スレッド)超えでの取得だから AttatchThreadInput が必要なんじゃね?
304デフォルトの名無しさん:2009/04/06(月) 17:44:44
>>300
本家がサポートを打ち切ったOSまでサポートしたくないだろ
305デフォルトの名無しさん:2009/04/06(月) 17:53:03
>>302,303
レス、ありがとうございます。
GetForcusでハンドルは取れるんですが、
ハンドルをSpyのものと見比べると、どうもただ単にウィンドウが
取得されているみたいです。

AttatchThreadInputは知らないんで調べてみます。
306デフォルトの名無しさん:2009/04/06(月) 18:10:22
ウインドウを透過させるAPIとかも2000以降だった希ガス。
307デフォルトの名無しさん:2009/04/06(月) 18:46:19
>>300
XP以降だと一部のコントロール(Editなど)がUnicode版しか対応していない
要するにXP以降にまともに対応するならUnicodeアプリにするしか無いってこと

もちろん9x/NT系を判別して内部でA/W切り替えれば両対応できるがそんなソフトは殆ど無い
308デフォルトの名無しさん:2009/04/06(月) 18:58:58
>>305
>単にウィンドウが取得されているみたいです。
それが GetFocus の仕様なんだけど?
309デフォルトの名無しさん:2009/04/06(月) 19:25:58
個別のコントロールのハンドルがほすぃ とか?
310デフォルトの名無しさん:2009/04/06(月) 20:28:08
GetForcusじゃなくてGetFocusを使えばいいと思うよ。
311デフォルトの名無しさん:2009/04/06(月) 20:43:37
GetForcusでググるとほとんどVBだな
さすがブビ厨は馬鹿ばっか
312デフォルトの名無しさん:2009/04/06(月) 21:15:08
最近だとVista/XPのみ対応、というソフトも出てきてるね。

ただNT系ならかなり以前のソフトでもXPで動くのは確か。
鬼畜王などなど
313デフォルトの名無しさん:2009/04/06(月) 21:26:42
鬼畜王はPC-98 486DX4 Win95でそこそこ動くレヴェル
314デフォルトの名無しさん:2009/04/06(月) 21:28:03
> Vista/XPのみ対応

てか、ほとんどがそれ。
2000を使ってると2000とXPの壁をよく感じるよ。
315デフォルトの名無しさん:2009/04/06(月) 21:39:01
>>313
486SX 33MHzで動かなかった思い出がw
316デフォルトの名無しさん:2009/04/06(月) 21:44:08
フリーソフトなんか、どうせサポートしなくていいんだから、
だめもとで、unicows.libリンクしておけばいいのに、と思う。
317デフォルトの名無しさん:2009/04/06(月) 22:41:02
フリーソフトが無保証なのはわかるが、だからといってサポートしなくていいなんて考えでソフト公開する人は氏ねと思う
318デフォルトの名無しさん:2009/04/06(月) 22:52:44
フリーソフト公開してる人でサポートしないって言ってる人いるんだ?
319デフォルトの名無しさん:2009/04/06(月) 22:56:23
しなくていいよそんな貧乏人の相手なんて
320デフォルトの名無しさん:2009/04/06(月) 22:57:53
貧乏人だからフリーソフト使ってるんだろが
321デフォルトの名無しさん:2009/04/06(月) 23:00:36
スレ違い
322デフォルトの名無しさん:2009/04/06(月) 23:02:40
つーか板違い
323デフォルトの名無しさん:2009/04/06(月) 23:04:10
>>321
都合が悪くなるとスレ違いと言って逃げる人ですね、わかります
324デフォルトの名無しさん:2009/04/06(月) 23:06:39
違います
325デフォルトの名無しさん:2009/04/06(月) 23:12:05
図星ですね、わかります
326321:2009/04/06(月) 23:17:33
違います。更に言うなら324は自分ではありません。
327デフォルトの名無しさん:2009/04/06(月) 23:17:39
プロセスツリーの終了はどうやればいいのでしょうか?
CreateToolhelp32Snapshot()などとTerminateProcess()を組み合わせれば
いけるのは分かるのですが、その方法では終了させている間に対象の
プロセスが停止して新しいプロセスが同じIDで起動して停止させてしまう
可能性はないのでしょうか?
328デフォルトの名無しさん:2009/04/06(月) 23:20:39
マルチタスクOSの根本を理解してない馬鹿発見
329デフォルトの名無しさん:2009/04/06(月) 23:22:40
>>328
すいません、詳しく教えてください。
330デフォルトの名無しさん:2009/04/06(月) 23:24:52
ググレカス
331デフォルトの名無しさん:2009/04/06(月) 23:30:24
>>327
そんなに心配ならプロセスハンドルを保持し続けていれば?
ハンドルを持っている、つまりカーネル内部にプロセスのオブジェクトが残っている限り、
そのIDは使い回されないはずだから。
332デフォルトの名無しさん:2009/04/06(月) 23:32:48
>>327
ジョブオブジェクトを使ったらいいんじゃない?
333デフォルトの名無しさん:2009/04/06(月) 23:35:16
>>331
ありがとうございます。
ただ、CreateToolhelp32Snapshot()がスナップショットなので、そこから目的の
プロセスのハンドルを探している間に(ハンドルをつかむ前に)PIDが使いまわされないかを
心配しています。
さすがにそんな短時間ではあり得ないのでしょうか?
334デフォルトの名無しさん:2009/04/06(月) 23:48:49
>>332
ジョブオブジェクトは知らなかったので調べてみました。
TerminateJobObject()を使って全てのジョブオブジェクトを終了させることが
出来そうですね。
ただ、ジョブオブジェクトを作る際にプロセスのハンドルを指定しなければならず、
PIDからハンドルを取得するまでの間にPIDが使いまわされる可能性は無いのでしょうか?

最初から自分でプロセスを作成してプロセスのハンドルを保持していれば問題
なさそうですが、そうでなければPIDがかぶる可能性が完全に無いということは
ありえないのでしょうか?
335デフォルトの名無しさん:2009/04/06(月) 23:56:14
> PIDからハンドルを取得するまでの間にPIDが使いまわされる可能性
大いにある

そもそも自分以外のプロセスをTerminateするなんて行儀が悪いんだよ
WM_CLOSE等の適当なメッセージを投げて終了してもらうように作っとけ
336デフォルトの名無しさん:2009/04/06(月) 23:57:44
>>333
プロセスの起動と終了を繰り返して、何回目で重複するか試してみればいいじゃん。
337デフォルトの名無しさん:2009/04/07(火) 00:05:15
DWORD pid;
GetWindowThreadProcessId( hwnd, &pid );
HANDLE handle = OpenProcess( pid, ... );

こういうソースが期待通りに動作する保証なんてどこにも無いってこと。
GetWindowThreadProcessIdからOpenProcessの間に、対象プロセスが終了して、違うプロセスが起動して同じPIDが使われる可能性があるからな。
338デフォルトの名無しさん:2009/04/07(火) 00:15:46
>>335
CreateProcess()で作成したところからハンドルを保持して管理するとか、メッセージ
投げて終了させるのが正しいのは分かるのですが、今回はそういうことが出来ない
事情があるのです。

>>337
正しく動作する保証が無いことは分かりましたが、タスクマネージャにある
「プロセスツリーの終了」はどうやって実現しているのでしょうか?
339デフォルトの名無しさん:2009/04/07(火) 00:22:03
どういう事情だよ
マルウェアでも作ってるのか?
340デフォルトの名無しさん:2009/04/07(火) 00:29:03
可能性がある、ってのと、現実的にありえる、ってのはだいぶ違うんだけどな。
341デフォルトの名無しさん:2009/04/07(火) 00:29:25
>>339
子プロセスの作成のソースは別のところが管理していて手が出せず、子プロセスの
終了部分だけを実装する必要があるのです。
342デフォルトの名無しさん:2009/04/07(火) 00:32:16
終了部分ってねぇ・・・

そもそもTerminateProcessは暴走したプロセスを止めるような目的で使う物だろが
343デフォルトの名無しさん:2009/04/07(火) 00:34:07
BOT作ってんの?不正行為に荷担したくないなぁ。
344デフォルトの名無しさん:2009/04/07(火) 00:37:41
ある体験版ソフトを使っている。
そのソフトは試用中には定期的に別プロセスが起動して広告メッセージを出す。
広告メッセージが出る以外は製品版と何ら違いは無い。
つまりこれを自動的に潰すプログラムを作れば製品版を購入する必要は無くなる。

こういう事じゃねーの?
345デフォルトの名無しさん:2009/04/07(火) 00:38:05
>>342
もちろん分かっていますが、プロセスが残って入れば強制終了させる必要があるのです。

>>343
違います。
もしそうであれば、ほぼ起きなさそうな確率の問題なんて心配しません。
346デフォルトの名無しさん:2009/04/07(火) 00:39:50
どうも下衆の勘繰りが好きだなお前ら
347デフォルトの名無しさん:2009/04/07(火) 00:42:45
だから強制終了しなくて済むように知恵を絞れよ
TerminateProcessが必然として話を進めてる時点でおかしいんだよ
348デフォルトの名無しさん:2009/04/07(火) 00:45:24
もういいよ。次の方、どうぞー
349デフォルトの名無しさん:2009/04/07(火) 00:50:08
はいー えーっと、Win32APIはどこから手付けたらいいですか?
350デフォルトの名無しさん:2009/04/07(火) 00:53:56
>>349
付けなくていい


はい次の方、どうぞー
351デフォルトの名無しさん:2009/04/07(火) 01:01:48
>>350
あのう、、一昨日くらいからなんですけどー・・・・
同じ関数を2回続けて呼ぶ糞を発見しました。
1回目はサイズ取得で2回目に所望の結果取得みたいなんですがー。
糞仕様だからですか?
352デフォルトの名無しさん:2009/04/07(火) 01:03:39
>>351
サイズ取得用に別関数を用意するのが面倒だったんだろ。
353デフォルトの名無しさん:2009/04/07(火) 01:06:26
バッファにNULLを渡せば必要なサイズを返すっていうWin32APIの実装は合理的だと思うが
354デフォルトの名無しさん:2009/04/07(火) 01:07:31
>>351
そうです
そしてあなたの日本語も糞です
355デフォルトの名無しさん:2009/04/07(火) 01:09:38
>>354
いえいえあなたには及びません
356デフォルトの名無しさん:2009/04/07(火) 03:18:05
>>353
なぜ? シンボル数が減らせるからか?
357デフォルトの名無しさん:2009/04/07(火) 06:15:02
コード量が少なくて済むだろ。

UINT GetHogeText( HANDLE hObj, LPTSTR buffer, UINT length )
{
 UINT sufficient_length = lstrlen( OBJ_TO_PTR(hObj)->Text ) + 1;
 if( buffer && length >= sufficient_length )
 {
  memcpy( buffer, OBJ_TO_PTR(hObj)->Text, sufficient_length );
 }
 return sufficient_length;
}
358デフォルトの名無しさん:2009/04/07(火) 08:42:37
USBで繋がれた機器とデータのやり取りをしたいんですが、どの辺りを勉強したら
いいんでしょうか?
例えばUSBカメラからの信号を受けるとか、何か接続されてる機器に信号を送るとか
359デフォルトの名無しさん:2009/04/07(火) 08:47:30
ドライバが提供するAPIを使うんじゃね?
360301:2009/04/07(火) 08:59:33
AttatchThreadInputを使って一応うまくいきました。
ありがとうございました。
新たに教えてほしいんですが、一応と書いたのは一旦他のプログラムに
フォーカスが移って目的の外部プログラムにフォーカスが戻ってきたときに
Editではなく親ウィンドウのハンドルが返ってくるときがあって、Editに
テキストを送れない時があります。
親ウィンドウかどうかは判別できるので親ウィンドウならEditのハンドルを
取得すればいいだけなんですが、なんかスマートな方法ってないですかね?
長文になってしまいましたが、よろしくお願いします。
361デフォルトの名無しさん:2009/04/07(火) 09:50:16
>>358
普通はドライバ経由で、その接続してる機器ごとの処理となる
USB-シリアルポートなら、普通のシリアルポートと同じ処理、
スキャナ等なら、ドライバ提供のものかtwainを使う
362デフォルトの名無しさん:2009/04/07(火) 10:00:42
>>359>>361
ということはその機器のドライバが提供してるAPIがわからない場合はデバイスドライバの
勉強からするべきなんしょうか
今度デバイスドライバ開発の本買ってみることにします。ありがとう
363デフォルトの名無しさん:2009/04/07(火) 12:26:57
>>357
同じAPIを2度続けてコールする話でしょ?
そのコードは的を射てない気がする。
364デフォルトの名無しさん:2009/04/07(火) 12:33:11
>>363
>>357>>356の回答
365デフォルトの名無しさん:2009/04/07(火) 12:38:18
>>351
>>353
>>356
>>357

って流れじゃないの?
366デフォルトの名無しさん:2009/04/07(火) 12:40:17
>>363は呼ぶ方のことを考えているだけで
呼ばれる側のコード量のことは考えてないだけだろう。
367デフォルトの名無しさん:2009/04/07(火) 14:45:49
>>366
なるほど・・・。

しかし、呼ばれる側が怠慢したいだけに思う。
基本は呼ぶ方のこと考えて設計するでしょう。
368デフォルトの名無しさん:2009/04/07(火) 14:50:03
Windowsの最初の頃は呼び出し規約をPASCALにするほど節約したかったんだよ。
369デフォルトの名無しさん:2009/04/07(火) 17:27:47
呼ぶ方が楽したかったらVBでも使っとけ
370デフォルトの名無しさん:2009/04/07(火) 17:34:41
>>367
わざわざ別のAPIにすれば下手すりゃ呼ばれる側のコード量が2倍近くになる
CPUの命令キャッシュにも載りにくくなるし、そんな理由でシステムファイルが肥大化して
OSのインストールディスクがDVD2枚組とかなったら迷惑
371デフォルトの名無しさん:2009/04/07(火) 17:41:04
同じAPIを2度呼びたくないってアホ丸出しの発想だな
別関数になってると「えーと、必要なサイズを取得するAPIは・・・」とMSDN引く手間が増える

そして「〜というAPIの必要サイズを取得するAPIを教えてください」「ググレカス」というレスで埋まる事になる
372デフォルトの名無しさん:2009/04/07(火) 17:45:40
話のコシをおるが、いまどきのVBはAPI呼ぶ時に楽になっているのか?

昔(1.0〜2.0の時代)はひとつのAPIを一度呼ぶだけのために”Public Declare Function うんたらかんたら"しなきゃならんかったので、
それがイヤになってVB→C→C++に乗り換えていったんだが。
(なもんで、俺のVBの時計は2.0で止まっている。)
373デフォルトの名無しさん:2009/04/07(火) 17:50:53
宣言の構文が変わってるだけで今も一緒じゃね?

#include <windows.h>
みたいなのはVB/C#には無いでしょ
374デフォルトの名無しさん:2009/04/07(火) 17:58:24
>>371
GetWindowText/GetWindowTextLengthとか分かれているのもあるから統一感がないんだよな。
375デフォルトの名無しさん:2009/04/07(火) 17:59:25
>>372-373
今も同じ。
変わったことがあるとすれば、そういうのをまとめているウェブサイトができて
ググってコピペできるようになったことくらい。
376デフォルトの名無しさん:2009/04/07(火) 18:00:25
GetWindowTextの場合プロセスを跨ぐ事もあるから別関数にした方が効率が良かったんじゃねーの?
377デフォルトの名無しさん:2009/04/07(火) 18:01:32
協調型マルチタスクだったWin3.1までは今の仕様で問題なかったが
サイズ取得以降、バッファを確保して実データを取得するまでの間にサイズが変動する可能性がある現在
2回呼び出しを要求するAPI仕様は阿呆としかいいようがない
378372:2009/04/07(火) 18:03:25
>>373 >>375
そか。ありがと。
379デフォルトの名無しさん:2009/04/07(火) 18:10:57
>>377
要するにAPI側でバッファ確保して返せってことか
アホはお前だよ
380デフォルトの名無しさん:2009/04/07(火) 18:11:38
データ長取得→メモリ確保→データ取得
ってやってる間にデータ長が変わるって可能性も無いわけじゃないんだよなぁ
381デフォルトの名無しさん:2009/04/07(火) 18:13:21
大多数のAPIは変動しないだろが

GetWindowsDirectoryとか、1回目と2回目の呼出の間にWindowsディレクトリが移動していたら驚愕
382デフォルトの名無しさん:2009/04/07(火) 18:30:38
ファイルを読み出そうと思ったら消されてた。
レジストリを逐次読んでいったら途中で書き換えられた。
環境変数からパスを取得していたら変更された。

>>377は阿呆としか言いようがない。
383デフォルトの名無しさん:2009/04/07(火) 19:47:04
>>382
ファイルは必要ならロックしろ
レジストリや環境変数は変更された場合問題があるなら使うな

当然だろ
384デフォルトの名無しさん:2009/04/07(火) 20:33:40
>>382
レジストリの読み書きは一度で行え
環境変数は変更されたらWM_SETTINGCHANGEが来るから適切に処理しろ

当然だろ
385デフォルトの名無しさん:2009/04/07(火) 21:17:31
Enum*は全部アウトかよ
386デフォルトの名無しさん:2009/04/07(火) 21:29:39
>>385
馬鹿?
387デフォルトの名無しさん:2009/04/07(火) 21:46:44
>>384
>レジストリの読み書きは一度で行え
馬鹿はこういう無理を平気で言う
388デフォルトの名無しさん:2009/04/07(火) 21:51:37
対策をとるのなら、サイズを指定するAPIも、
正常にとれるまでサイズの取得、メモリの確保、データの取得を繰り返せばいいだけ。
他は対策云々を出すのに、この件に関しては出さないって、どれだけ頭が悪いんだろう?
389デフォルトの名無しさん:2009/04/07(火) 22:05:44
レジストリの読み書きは
RegCreateKeyEx
で開いたら一度になる、ってことじゃないのか?
390デフォルトの名無しさん:2009/04/07(火) 22:08:52
>>387
RegQueryMultipleValues


つーかレジストリが途中で書き換えられて困る状況なんて無いに等しいだろ

少なくとも HKCU\software\(会社名)\(ソフト名) が途中で書き換えられる事は無い
∵自分以外のソフトがここにデータを書く事は無い

関連付けのような、他のソフトが弄れるレジストリでも然るべき手順で読み書きすれば問題無い
391デフォルトの名無しさん:2009/04/07(火) 22:17:41
マイドキュメントは使うかも
392デフォルトの名無しさん:2009/04/07(火) 22:26:36
実際に必要になったら話題にしてくれよ

お前ら普段そんな気使ってるの?
393デフォルトの名無しさん:2009/04/07(火) 22:29:20
RegQueryMultipleValues
>ldwTotsize
>lpValueBuf パラメータが指すバッファのサイズを、
>バイト単位で示す値へのポインタを指定します。関数が成功すると、
>バッファにコピーされたバイト数が ldwTotsize パラメータに入ります。
>バッファが小さすぎたために関数が失敗した場合は、必要なサイズ(バイト数)が入ります。
394デフォルトの名無しさん:2009/04/07(火) 22:30:33
>>390
複数起動を許すAPを作った場合は考える必要がありそうな気もする。
395デフォルトの名無しさん:2009/04/07(火) 22:33:55
そもそも複数のレジストリが同時に読みたいんじゃなくて、
レジストリからパス情報なりを取得した後に、
データを読み書きしようとしたら、
その間にパスを変更されるだろという話だ。

結局そんなことを言っていたら切りがない。
それが>>377に対する結論。
396デフォルトの名無しさん:2009/04/07(火) 22:36:22
>>390
二重起動は無視?
397デフォルトの名無しさん:2009/04/07(火) 22:36:31
 プログラム上でのビットマップ作成についての質問です。
  ・カラーのビットマップの作成
  ・2階調のビットマップの作成

 Win32APIを使ってジグソーパズルを作っています。
 1枚の元絵を読み込んで、そこからピース(台形)ごとにビットマップと
マスク(2階調)を作成して、PlgBlt関数で描画をさせようと考えました。

 ・CreateBitmap
 ・CreateDIBitmap
 ・CreateDIBSection

 ビットマップの作成については上に書いた3つの関数を見つけたのです
が、主に引数の値をどうすればいいのかが、いまいち分かりません。
 LoadImage等で読み込んだ元絵は、GetObject等でピクセルデータの取得
をすることはできましたので、カラー用のビットマップと、2階調のマスク
が作れれば解決すると思うのですが、どういった風に記述すれば作成できま
すでしょうか?

 ちょっと説明が分かりづらくて申し訳ないのですが、教えて頂けますと嬉
しいです。
398デフォルトの名無しさん:2009/04/07(火) 22:52:30
>>394
自分のアプリなら読み書きする時にMutexでロックするぐらいの対策はしておくべきだろ

>>395
マイドキュメントが変更されると困るとかそういう話か?
パスが変更されて困るならApplicationDataに置いとけばいいだろ


要するにアプリ側で対策すれば済むレベルなんだよ
399デフォルトの名無しさん:2009/04/07(火) 22:54:55
何がいまいち分からないのかが分からない
400デフォルトの名無しさん:2009/04/07(火) 23:01:28
>>398
>自分のアプリ
勝手な前提で話を進めるなよ。
そんなことを言ったらサイズが変更される可能性のあるAPIだって、
自アプリ外で変更される可能性のないものを前提にすればいいだけになるだろ。
自分の主張を押し通すだけのために、都合のいいように条件を決めるって、
どれだけ自分勝手なんだよ?
401デフォルトの名無しさん:2009/04/07(火) 23:14:18
多重起動を許すアプリなら設定の読み書きをシリアライズ化するのは常識だろ
402デフォルトの名無しさん:2009/04/07(火) 23:15:02
Win32API使いって頭も凝り固まった人多いのか。
Win32APIの常識は常識って発想。まじウケるんだけど。
403デフォルトの名無しさん:2009/04/07(火) 23:18:42
>>402
小学生は黙っててね。
404デフォルトの名無しさん:2009/04/07(火) 23:24:46
つーか複数タスクから同一の資源に対して非同期にアクセスするとどうなるかなんて考えればすぐ分かると思うけどねぇ
405397:2009/04/07(火) 23:28:53
>>399
言葉足らずで申し訳ないです。
各関数を使ったビットマップの作り方です。

まず、以下のプログラムで2階調のデータはできていますでしょうか?


lpBitmap = (LPBYTE)HeapAlloc( GetProsessHeap( ) , HEAP_ZERO_MEMORY , xsize * ysize ) ;

(次に、lpBitmapの中をどういう扱えば、任意のピクセルの色を黒から白に変えられますでしょうか?)

hBitmap = CreateBitmap( xsize , ysize , 1 , 1 , lpBitmap ) ;
406デフォルトの名無しさん:2009/04/07(火) 23:38:45
目的の箇所のビットを1にすればいい
407397:2009/04/07(火) 23:43:59
>>406
ビットでしたか、すみません、すっかり頭から抜けていました。
通りでオーバーフローしていたのですね。
やってみます、ありがとうございました。
408デフォルトの名無しさん:2009/04/07(火) 23:50:34
>>405
特にこだわりがないならCreateDIBSectionでやってしまうというのもいいとおもうよ。
ピクセルを操作する事を望んでるみたいだからそのようにしてみてはいかがかな?

ttp://wisdom.sakura.ne.jp/system/winapi/win32/win121.html
409397:2009/04/08(水) 00:09:41
>>408
CreateDIBSectionでカラービットマップ、CreateBitmapでマスクを作って、試してみようと思います。
また分からないことができてしまった際には、教えてくれると嬉しいです。
助かりました、ありがとうございました。
410デフォルトの名無しさん:2009/04/08(水) 03:09:57
>>403
は?何言ってんの?
このスレじゃ一番有識者だけど?断言してもいいぜ?勝負するか?
411デフォルトの名無しさん:2009/04/08(水) 03:20:15
一人でやってろゴミ
412デフォルトの名無しさん:2009/04/08(水) 06:13:04
一人でやってろクズ
413デフォルトの名無しさん:2009/04/08(水) 08:58:20
あのさ、ここはWin32APIを使うためのスレであって、Win32APIの設計について
話すようなスレじゃないだろ。
どんなクソな設計だろうと、一貫性があろうとなかろうと、最終的には
それを使わなきゃならないんだから、黙って実装に従って使えってこった。
414デフォルトの名無しさん:2009/04/08(水) 09:25:18
>>410
ごめん中学生だったか、黙っててね。
415デフォルトの名無しさん:2009/04/08(水) 10:55:01
質問です。
付箋アプリのようにデスクトップにウィンドウを貼り付けるにはどうしたらいいでしょうか?
MSDNにはWPFのサンプルはあったのですが、Win32でやるにはどうしたらいいでしょうか。
416デフォルトの名無しさん:2009/04/08(水) 10:56:53
CreateWindow()
417デフォルトの名無しさん:2009/04/08(水) 12:49:10
>>413
黙って従ってたらWin32API並の糞インタフェースを公開する
馬鹿開発者が増えるんだぞ。
418デフォルトの名無しさん:2009/04/08(水) 13:00:53
具体的に問題になってから言ってくれよ
空が落ちてくる心配みたいなものだろ
419デフォルトの名無しさん:2009/04/08(水) 13:23:11
空が落ちてきてからじゃ遅いぞw
420デフォルトの名無しさん:2009/04/08(水) 13:25:42
落ちて来ない(馬鹿が増えたところで何の問題もない)んだからどうでもいいだろ
421デフォルトの名無しさん:2009/04/08(水) 13:26:11
ここはオレが押さえてるからみんなは先に行ってくれ!
422デフォルトの名無しさん:2009/04/08(水) 13:32:37
馬鹿が増えたからコンピュータが出来たし、その逆も言えるのでは?
423デフォルトの名無しさん:2009/04/08(水) 13:34:37
概念論と化して来てるなwww
この辺にしておかないか?いやホントに。
424デフォルトの名無しさん:2009/04/08(水) 13:58:20
“Win32APIは糞”
訳:Win32APIは難しくてボクには理解できません><
425デフォルトの名無しさん:2009/04/08(水) 14:05:17
ドトネト厨(特にブビ厨)でAPIを使えない奴の台詞

「Win32APIは設計がクソだ」
426デフォルトの名無しさん:2009/04/08(水) 15:28:15
ファイルシステムを経由せずに直接ディスク上のデータを取得したいのですが
そういった用途で使えるWin32APIってどれでしょうか?OSはWindows XPです。
たとえばMBRとかFATとかパーテーションテーブルとかゴミ箱から削除したファイルの残骸などです。
427デフォルトの名無しさん:2009/04/08(水) 15:37:38
CreateFileじゃだめなん?
428デフォルトの名無しさん:2009/04/08(水) 15:41:17
Windows 指定のポートのUSBの電源を止める/つける方法って何かありませんか?
429デフォルトの名無しさん:2009/04/08(水) 16:03:07
>>427
大丈夫でしたorz
ですよね。すみません助かりました。難しく考えすぎてたorz
ありがとうございます!!
430デフォルトの名無しさん:2009/04/08(水) 16:38:25
>>420
あんた仕事したことある?coderレベルの仕事しかしてないんじゃない?
たまに、いかにもWin32APIって仕様のインタフェース見かけるよ。
理に適ってれば許すが、あらゆる観点でWin32API厨的な作り。
無駄に引数13個とかな。
431デフォルトの名無しさん:2009/04/08(水) 16:39:44
こんなところで仕事の話とかしなくていいよ
432デフォルトの名無しさん:2009/04/08(水) 16:40:51
そうだ
仕事したくないから2chやってる身にもなれ
433デフォルトの名無しさん:2009/04/08(水) 16:42:24
それはAPIが原因なのかあ?
単に設計がバカなだけだと思うけど。
434デフォルトの名無しさん:2009/04/08(水) 16:44:30
>>430
>たまに、いかにもWin32APIって仕様のインタフェース見かけるよ。

作った奴に言ってろ。
「言ったよ」ってレスはいらねえぞ。
解決したならそれで良いじゃん。現時点で何か問題なの?って話。
435デフォルトの名無しさん:2009/04/08(水) 16:45:08
なんだこれ自演かwwwwwwwww?
436デフォルトの名無しさん:2009/04/08(水) 16:47:41
Win32APIって仕様のインターフェースが糞だからって
インターフェースを統一した Win32APIラッパ- をわざわざ用意しなおすの? って話に・・・
437デフォルトの名無しさん:2009/04/08(水) 16:48:37
430 名前:デフォルトの名無しさん[sage] 投稿日:2009/04/08(水) 16:38:25
431 名前:デフォルトの名無しさん[sage] 投稿日:2009/04/08(水) 16:39:44
432 名前:デフォルトの名無しさん[sage] 投稿日:2009/04/08(水) 16:40:51
433 名前:デフォルトの名無しさん[sage] 投稿日:2009/04/08(水) 16:42:24
434 名前:デフォルトの名無しさん[sage] 投稿日:2009/04/08(水) 16:44:30
435 名前:デフォルトの名無しさん[sage] 投稿日:2009/04/08(水) 16:45:08

ワロタ
438デフォルトの名無しさん:2009/04/08(水) 16:52:30
WinAPIが糞だと思ったらMSの開発チームにでも入って理想的なインターフェイスのAPI開発して欲しい

それができないなら実現不可能だから黙ってて
439デフォルトの名無しさん:2009/04/08(水) 16:53:54
もう、リリースされたもんに文句言うなよ
440デフォルトの名無しさん:2009/04/08(水) 16:56:17
鬼のようにフィードバック連打したら改善してくれるんじゃねえかw?
441デフォルトの名無しさん:2009/04/08(水) 16:56:54
WinAPIが糞だと思っていた時期が俺にもありました。

今となっては別の感慨を抱いている。

1) あれの代わりを俺が設計できるか? できないだろう。
2) APIを定めたマイクロソフトの開発チームは俺より優秀か? はるかに優秀だろう。
3) ホントは慣れてきただろ? そうそう、もう慣れてきた。苦痛も無い。
442デフォルトの名無しさん:2009/04/08(水) 16:58:17
それはキモイわ
443デフォルトの名無しさん:2009/04/08(水) 16:58:29
すごい人口密度ワロタ
444デフォルトの名無しさん:2009/04/08(水) 16:59:44
さすが、プログラム板一勢いがあるスレ
445デフォルトの名無しさん:2009/04/08(水) 17:13:29
>>436
でもそれが存在していて、美しく一貫性があって、しかもきわめて
薄いラッパーで性能低下がほぼ0だったら、俺は使う。
446デフォルトの名無しさん:2009/04/08(水) 17:15:17
無いものねだりは死ね
447デフォルトの名無しさん:2009/04/08(水) 18:13:07
なんだ小学生がバレて悔しかった>>410が一人でファビョっただけか
学校始まって憂鬱なんだろうけどこんなスレで憂さ晴らしするなよ
448デフォルトの名無しさん:2009/04/08(水) 18:15:47
さあ、Cairoの実装を進める作業に戻るんだ
449デフォルトの名無しさん:2009/04/08(水) 18:26:26
>>430
> 無駄に引数13個とか
Win32APIのインタフェースとどう関係あるんだ
まさかAPIの中に引数が多い関数があるからとか言う理由じゃないよな
450デフォルトの名無しさん:2009/04/08(水) 18:51:59
糞だ糞だを連呼してるだけで、具体的にどこが糞なのか、どうすべきなのかは指摘できない

VB厨がAPI呼出の煩雑さに発狂してるだけでしょうな
451デフォルトの名無しさん:2009/04/08(水) 19:04:36
WinAPIで困るのは関数が常にフルスペックなことかな。
良く引数で迷う。
452デフォルトの名無しさん:2009/04/08(水) 19:05:38
フルスペック?
453デフォルトの名無しさん:2009/04/08(水) 19:10:02
あぁ、言い方悪かった。
念のため用意されてるような引数が多すぎる。
454デフォルトの名無しさん:2009/04/08(水) 19:13:13
省略したいものも含めて列挙若しくは構造体の設定が必要 ってこと? <フルスペック

開発環境の力借りて言語的に補助するのならワカランではないけど
同じ機能のAPIで省略可能な組み合わせ分をシンボル変えて列挙用意するのは微妙だな。
455デフォルトの名無しさん:2009/04/08(水) 19:14:41
言葉遣いは変だが言いたいことはわかる
例えば滅多に NULL 以外を指定しない引数あるいはメンバなどが多すぎる
456デフォルトの名無しさん:2009/04/08(水) 19:16:06
MFCかWTLでも使えばいいだろ
457451:2009/04/08(水) 19:18:05
>>455
正解!
458デフォルトの名無しさん:2009/04/08(水) 19:21:35
しばしば、予約済み (Reserved)なメンバや引数があるけど、無くしてほしい。
内部で使うんだったら、一般公開用のAPIとは別にすればいいし、
将来使うつもりなら、そのときにExでも付けて新APIを増やせばいいのにと思う。
459デフォルトの名無しさん:2009/04/08(水) 19:31:33
>>455
他だと引数ごとに関数が用意されているのか?
そんな訳はないよな、それこそ馬鹿げている
書く必要がないだけで大元は引数が用意されているんじゃないのか
460デフォルトの名無しさん:2009/04/08(水) 19:31:39
ReservedやUnusedってのは以前は使われていたけど後に廃止されて残ってる物がほとんどだよ
461デフォルトの名無しさん:2009/04/08(水) 19:36:41
>>459
その論で CreateFont を場合分けして作ったいったら爆発しそうだw
CreateFont_Name (名前だけで) とか CreateFont_Height (高さだけで) .... 気が狂いそう
462デフォルトの名無しさん:2009/04/08(水) 19:43:13
>>460
逆か。そういえばCallNext(ryとかCreateWindowのやつがそうだね。
463デフォルトの名無しさん:2009/04/08(水) 19:43:43
>>461
CreateFontをよく分かってない馬鹿発言だな
464461:2009/04/08(水) 19:49:28
>>463
どういうこと?
NULLや0を省略的意味で引数に渡せる関数で
NULLや0を記述する必要の無い API が欲しい って言ってるのが元なんだけど・・・
465デフォルトの名無しさん:2009/04/08(水) 19:50:09
CoInitializeのReservedは16ビット時代にはアロケータを指定できた
IMAGEINFOのUnusedは当初はhbmImageのプレーンとビット数だった


探せば幾らでもあるだろ
466デフォルトの名無しさん:2009/04/08(水) 19:50:21
>>459
> 引数ごとに関数
SetHoge(handle, hage); とかそうだろ

大元ってのがよくわからんが
GetObject と CreateHogeIndirect みたいなパターンで
「普通の設定」をパスできるならそうしたいだろ

誰か言ってたけど C++ が欲しくなる
467デフォルトの名無しさん:2009/04/08(水) 19:52:49
だったらMFCかWTLでも使えって言ってるだろが
468デフォルトの名無しさん:2009/04/08(水) 19:55:43
>>466
CreateHogeIndirect ⇔ CreateHoge と SetHoge_Indirectの中の1つ
こういうことか

Create 直後から Set 呼び出し完結するまでのスキマの扱いがやらしいね
469デフォルトの名無しさん:2009/04/08(水) 20:13:34
>>466
勘違いか?
引数の数ごとに関数が在るのかどうかだぞ

そうじゃないなら、速度を重視した場合余計な処理が増える事になる
デフォルトをパスしたくても最終的にはデフォルトであるということを伝えなければならない
470デフォルトの名無しさん:2009/04/08(水) 20:14:08
クラック防止?
471デフォルトの名無しさん:2009/04/08(水) 20:17:31
>>434
言ったよ
472デフォルトの名無しさん:2009/04/08(水) 20:20:09
呼び出し云々で文句言うやつはラッパーで十分
473デフォルトの名無しさん:2009/04/08(水) 20:29:23
所詮その程度の指摘しか出来ない奴がAPIは糞とか喚いてた訳か
474デフォルトの名無しさん:2009/04/08(水) 20:29:31
>>472
言ったよ
475デフォルトの名無しさん:2009/04/08(水) 20:37:20
>>469
引数の数と関数の数の一致にこだわる理由がよくわからない
誰もそうは言っていないと思うぞ

渡すべき情報が多いときは構造体にまとめるなり
デフォルト値を用意するなりは、変わったことではない

誰か言っていたが歴史的事情で残った醜悪さだと俺も思うが
その醜悪さを残すまいとする工夫に欠けるところが皆無だと思うか?


> デフォルトをパスしたくても最終的にはデフォルトであるということを伝えなければならない

いや、ある時点まで黙っていることによって確定するデフォルトが欲しいこともある
476デフォルトの名無しさん:2009/04/08(水) 20:42:24
うるさいよ
477デフォルトの名無しさん:2009/04/08(水) 20:49:06
>>475
引数のだけの問題ならそれこそインライン展開のラッパーで十分
処理を増やしていいなら何とでもなる
それがAPIは糞とどう関連するんだ
478デフォルトの名無しさん:2009/04/08(水) 20:54:24
#include <windows.h>
#include <tchar.h>
int APIENTRY _tWinMain(
HINSTANCE hInstance ,
HINSTANCE hPrevInstance ,
PSTR lpCmdLine ,
int nCmdShow ) {
HWND hwnd;
WNDCLASS winc;
winc.style = CS_HREDRAW | CS_VREDRAW;
winc.lpfnWndProc = DefWindowProc;
winc.cbClsExtra = winc.cbWndExtra = 0;
winc.hInstance = hInstance;
winc.hIcon = LoadIcon(NULL , IDI_APPLICATION);
winc.hCursor = LoadCursor(NULL , IDC_ARROW);
winc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
winc.lpszMenuName = NULL;
winc.lpszClassName = TEXT("KITTY");
if (!RegisterClass(&winc)) return 0;
hwnd = CreateWindow(
TEXT("KITTY") , TEXT("Kitty on your lap") ,
WS_OVERLAPPEDWINDOW ,
100 , 100 , 200 , 200 , NULL , NULL ,
hInstance , NULL
);
if (hwnd == NULL) return 0;
ShowWindow(hwnd , SW_SHOW);
MessageBox(NULL , TEXT("Kitty on your lap") ,
TEXT("Kitty") , MB_ICONINFORMATION);
return 0;
}
479デフォルトの名無しさん:2009/04/08(水) 20:55:04
error C2731: 'wWinMain' : 関数はオーバーロードできません。

どういうこと?
480デフォルトの名無しさん:2009/04/08(水) 20:56:48
int APIENTRY _tWinMain(
HINSTANCE hInstance ,
HINSTANCE hPrevInstance ,
LPTSTR lpCmdLine ,
int nCmdShow )
481デフォルトの名無しさん:2009/04/08(水) 20:58:38
WTLにしろMFCにしろ WNDPROC にユーザー追加領域部分がうまくないくて
マップやチャンウで濁してる部分が嫌な感じだな
482デフォルトの名無しさん:2009/04/08(水) 21:10:39
>>477
例えば CreateWindow に Indirect がないのは、処理を減らすためだったと思うか?

# 俺は糞という表現は使っていないが、変だと思うところを無理に納得しようとはしていない
483デフォルトの名無しさん:2009/04/08(水) 21:29:18
もともとオブジェクト関係しかないと思うが

CreateDialogIndirectはちょっと違うし
あるとすればMessageBoxIndirectぐらいか
484デフォルトの名無しさん:2009/04/08(水) 21:47:55
そうかなー
Indirect を用意するとしたらモードレスの方だと思うけど
485デフォルトの名無しさん:2009/04/08(水) 21:50:35
Win16時代を知ってる人ならばとある歴史的理由でCreateWindowIndirectが無いって知ってる筈だがね
どうせWin32のそれもXP以降ぐらいしか使ったこと無いようなゆとりだろ
486デフォルトの名無しさん:2009/04/08(水) 21:56:24
typedef struct tagCREATESTRUCT {
LPVOID lpCreateParams;
HANDLE hInstance;
HMENU hMenu;
HWND hwndParent;
int cy;
int cx;
int y;
int x;
LONG style;
LPCSTR lpszName;
LPCSTR lpszClass;
DWORD dwExStyle;
} CREATESTRUCT;

見事に逆順でフイタwww
487デフォルトの名無しさん:2009/04/08(水) 21:59:05
実装がどうなってるかは知らんが
スタック絡みじゃないか
488デフォルトの名無しさん:2009/04/08(水) 22:02:50
>>484
CreateDialogIndirectはモードレスなんだが
>>482が言ってる処理とは少し異なる
489デフォルトの名無しさん:2009/04/08(水) 22:04:46
結局、CreateWindowやCreateFileなどの引数が多くてゴネてただけなのか

久々に低次元な論争を見た
490デフォルトの名無しさん:2009/04/08(水) 22:25:16
構造体を指定する方が面倒だろが

引数だと語呂合わせで覚えてしまえばいいが、
構造体のメンバの名前を一字一句間違えず暗記するのは大変だし入力するにも手間がかかる


先に言っとくがIntelliSenseが当然な時代しか知らないゆとりはレスしなくていいよ
491デフォルトの名無しさん:2009/04/08(水) 22:25:23
低次元なのは結局>>417じゃん
492デフォルトの名無しさん:2009/04/08(水) 22:31:39
>>485
Win16なんてどうでもいい。もう16ビットマシンないでしょ?
あと10年も経ったらWin32なんてどうでもいいよ。Win64が主流になるんだから。
おまえは1950年代のコンピュータ使ったことないだろ?
どうせWin16以降しか使ったことないようなゆとりだろ。
493デフォルトの名無しさん:2009/04/08(水) 22:33:16
>>490
覚えるって発想が馬鹿なんだって。意味わかる?
構造体指定より引数がいいって・・・馬鹿かよ。サンデープログラマーだろ?
494デフォルトの名無しさん:2009/04/08(水) 22:35:49
トランジスタ発明直後にPCは存在しない
495デフォルトの名無しさん:2009/04/08(水) 22:36:38
>>492-493
ゆとり乙
新学期頑張れよ
496デフォルトの名無しさん:2009/04/08(水) 22:55:12
ゆとりと言われて「1950年代のコンピュータ使ったことないだろ?」てw

小学生の喧嘩かよwww
497デフォルトの名無しさん:2009/04/08(水) 22:59:04
MSが16ビットから32ビットへの転換時に手抜きしたのが悪いんだけどな。
今時16ビットウィンドウズなんて学ぶどころか知る価値すら無いよ。
498デフォルトの名無しさん:2009/04/08(水) 23:02:18
Windows3.1とWindowsNT3.1ってそんなに時間差ないよね。
499デフォルトの名無しさん:2009/04/08(水) 23:08:39
>>497
小学生は大人しくXP/Vistaを使っててね
500デフォルトの名無しさん:2009/04/08(水) 23:09:36
小学生はパソコンに触れなくていいです
501デフォルトの名無しさん:2009/04/08(水) 23:11:24
Win16からWin32への転換期にまだ生まれてなかった人が
「学ぶどころか知る価値すら無い」とか言っちゃってるよwww
502デフォルトの名無しさん:2009/04/08(水) 23:28:13
>>490
HOGE hoge = {a, b, c};
って書こうとしたが、これANSI Cでも初期化子に変数とか
コンパイル時定数でない値を指定できないんだっけ。
503デフォルトの名無しさん:2009/04/08(水) 23:34:21
HOGE* hoge = (HOGE*) "\x03\x45\x03\x45\x03\x45";
504デフォルトの名無しさん:2009/04/08(水) 23:38:31
>>432
良かった。
今日の一言に推奨。
505デフォルトの名無しさん:2009/04/08(水) 23:40:08
>>502
馬鹿か。そんな書き方するなら引数指定の現状でいいだろ。
506デフォルトの名無しさん:2009/04/08(水) 23:49:02
もういいから他でやってよくだらねえ
続けるならここから3レス以内に結論出せ
ウゼエ
507デフォルトの名無しさん:2009/04/08(水) 23:52:45
3レスは無理だが3スレ以内なら何とか頑張ってみるよ
508デフォルトの名無しさん:2009/04/08(水) 23:54:06
〜結論〜

509デフォルトの名無しさん:2009/04/08(水) 23:55:00
え?俺?
そんなこと言われても・・・ちょっと困るわ。
510デフォルトの名無しさん:2009/04/09(木) 00:09:03
後は頼んだ>>511
511デフォルトの名無しさん:2009/04/09(木) 00:12:19
おう、任せとけ
512デフォルトの名無しさん:2009/04/09(木) 00:22:30
〜結論〜

Build81まで続きます。


以上
513デフォルトの名無しさん:2009/04/09(木) 03:25:16
レバーコントロールなんですが、
"hwndChild"で子ウインドウをセットできるけど1つしかセットできないですよね
エクスプローラーとか、 コンボボックス(アドレス) ツールバー(移動)
見たいに一行に複数のウインドウが入ってるタイプがあるからどうなってるのかなって、
ウインドウの上にコンボボックスとツールバーをセットしてそのウインドウをセットしてるとかなんですかね??

これが正解的な方法を教えてほしいです。。。
514デフォルトの名無しさん:2009/04/09(木) 04:34:16
質問文を書く前にSpy++で確認すれば解決するだろが
515デフォルトの名無しさん:2009/04/09(木) 06:59:12
1、ユーザー:ウィンドウサイズを変更
2、WM_SIZE:表示内容のサイズの変更
3、WM_PAINT:再描画

ユーザーがウィンドウサイズを変えることによって、
表示内容のサイズもウィンドウに合わせたいのですが、
メッセージが来る順番は、上の1〜3のようになるのでしょうか。

また、一瞬ですが、ウィンドウサイズが変更された後に
表示内容サイズの変更されていないものが
表示されているように見えるのですが、
ウィンドウがない位置に表示してしまって大丈夫なのでしょうか。
(BeginPaintでの描画なら、そこを自動的に調節してくれている?)
516デフォルトの名無しさん:2009/04/09(木) 07:08:00
他のソフトのサイズを変更して元に戻すといったことをするとして、
変更が目に付かないようにするAPIって無いですか?
ウィンドウを小さい腐れたときに隠れてる部分にクリックメッセージを
送りたいので。
517513:2009/04/09(木) 09:17:09
む〜、よくわからんです、
これってレバーコントロールの上にツールバーやコンボボックスをただ並べてるだけなんでしょうか・・・
518デフォルトの名無しさん:2009/04/09(木) 09:24:25
ttp://homepage2.nifty.com/c_lang/sdk2/sdk_182.htm
第182章 レバーコントロールの基礎
519デフォルトの名無しさん:2009/04/09(木) 09:25:03
Spy++で確認しても分からんって・・・馬鹿?
520デフォルトの名無しさん:2009/04/09(木) 09:27:11
Spy++の使い方がわからん奴なんているんだな
521デフォルトの名無しさん:2009/04/09(木) 09:32:03
>>513
適当な親を作ってそれにコンボボックスとツールバーを作ってやればいい
>>514を試したのか?Spy++が無いにしろ親子関係を知る類似のソフトはあるだろ

>>515
WM_SIZEの最後にInvalidateRectでもいれとけばいい

>ウィンドウがない位置に表示してしまって大丈夫なのでしょうか。
描画されるのはウィンドウではなくデバイスコンテキストなので問題ない

>>516
目的のウィンドウがサイズ外のメッセージを処理する設計になっている
かつクリック位置がサイズに影響することなく不変であるなら
ウィンドウのサイズ外でもメッセージを送ることは可能
522デフォルトの名無しさん:2009/04/09(木) 09:37:25
レジストリをアトミック操作する汎用的な手段が無い点などの問題が指摘されていたはずなのに
いつのまにか引数のようなどうでもいい話になっているんだ
523515:2009/04/09(木) 09:41:31
>>521
なるほど、ありがとうございます。
524デフォルトの名無しさん:2009/04/09(木) 09:43:45
あるプロセスがレジストリを操作している間、他のプロセスがレジストリにアクセスできないなんて大問題だろ
そんなの無くて当然
525デフォルトの名無しさん:2009/04/09(木) 09:46:21
レジストリに文字列を書き込んでるときに、一瞬の後から別のプロセスが読み取りの要求をしたときに、
書き込みが終わってることは保障されてるの?
526デフォルトの名無しさん:2009/04/09(木) 09:49:50
保証されてるに決まってるだろ

だからINIじゃなくてレジストリを使うべきなんだよ
527デフォルトの名無しさん:2009/04/09(木) 09:51:09
アトミック操作が必要になる例って>>395しか挙げてないんだけど

マイドキュメントの位置を調べてファイルを作成するとする
SHGetSpecialFolderPathを読んだ後に、CreateFileするまでの間にマイドキュメントが移動されたとしよう

CreateFileが失敗するだろ?これを例外で始末して成功するまでやり直せばいいだけじゃん
どうしてこう頭が固くて応用が利かないんだろう
528デフォルトの名無しさん:2009/04/09(木) 09:54:08
ttp://msdn.microsoft.com/en-us/library/ms725505.aspx

> It is not possible to lock a registry key during a write operation to synchronize access to the data.
> However, you can control access to a registry key using security attributes.

ちゃんと書いてあるね
結局、MSDNをロクに見てない馬鹿が騒いでただけか・・・
529デフォルトの名無しさん:2009/04/09(木) 09:59:38
RegOpenKeyTransacted
RegDeleteKeyTransacted
530デフォルトの名無しさん:2009/04/09(木) 10:01:17
>>527
マイドキュメントの位置を1_秒おきに移動するソフトがあるとその実装では困るだろ。
531デフォルトの名無しさん:2009/04/09(木) 10:04:22
>>530
ちょっと面白い。
532デフォルトの名無しさん:2009/04/09(木) 10:07:22
>>530
別に1_秒おきに移動しなくてもいい
その一回と>>527の一回が重なった場合の話じゃないのか?
もしかして釣られた?
533デフォルトの名無しさん:2009/04/09(木) 10:08:50
>>532
1回しか移動しないと、>>527は成功するまでやり直すって言ってるからそのうち成功するよ
534デフォルトの名無しさん:2009/04/09(木) 10:09:04
SHLockSpecialFolderLocationを事前に呼び出しておけばいいよ
535デフォルトの名無しさん:2009/04/09(木) 10:11:38
すまん勘違いしてた
やり直しが成功するまでにまた移動したら困るということね
536デフォルトの名無しさん:2009/04/09(木) 10:45:04
Windowsアプリって全部のウインドウやコントロールにはハンドルがあるものだと
思ってたんですけど。
ブラウザの中のボタンとかFirefoxが表示するダイアログとかって、中のコントロール
に一切ハンドルとかが無いのは、どういう仕組みなんですか?
イベントドリブンで動いてないんでしょうか?
537デフォルトの名無しさん:2009/04/09(木) 10:48:42
ボタンの絵を描いてボタンのように振舞わせてるだけ。
エディトやコンボボックスも同じ。
538デフォルトの名無しさん:2009/04/09(木) 10:50:16
>>536
IEもFirefoxもWindowsコントロール使わずに全部自前で描画、イベント処理してる
539デフォルトの名無しさん:2009/04/09(木) 10:52:51
それはそっちの方が実行速度が早いとか安全性が高いというからなの?
それとも別の理由が?
540デフォルトの名無しさん:2009/04/09(木) 11:06:56
別の理由がある。
541デフォルトの名無しさん:2009/04/09(木) 11:10:59
>>539
IE,Firefox と、標準のコントロールだけで作られた画面見比べてみりゃわかる
負荷は高くなってると思うが、今のCPUパワーなら微々たるもの
542デフォルトの名無しさん:2009/04/09(木) 12:50:07
メッセージ・ループを回してる子ウインドウが、オーナー・ウインドウを閉じても
死にきってないようで、プロセスがタスク・マネージャに残ります?

オーナー・ウインドウから WM_CLOSE を送る方法では駄目なのでしょうか?
それとも、なにか見落としてる手続きがあるのでしょうか? お教えください。
543デフォルトの名無しさん:2009/04/09(木) 12:57:53
>>542
別スレッドで子ウインドウ用のメッセージ・ループを回してるって事か?
544デフォルトの名無しさん:2009/04/09(木) 13:03:30
PostQuitMessage(0);
が無いとか・・・じゃないよね
545デフォルトの名無しさん:2009/04/09(木) 13:17:18
destroyWindow(
546デフォルトの名無しさん:2009/04/09(木) 13:22:58
ExitProcess
547デフォルトの名無しさん:2009/04/09(木) 13:28:17
                                             / /
.                                      |       //
    ひ ぐ ち か っ た ー                   |     . /
                         .   \         |    //
            ゛""''‐、    、    ────\── ─ .─|─./-/──── ─ --
         _,,....,,_         `ヽ、         \ .', `.'  |/. / 、.' .' `  . .'  、゚ /
        , '"      ,;   ,..-‐'''' ̄`ヽ゛""''‐、,     \ ;.:. / ,|_ / -'. '`.  .・ '  /   ´、 ,
.       ,'       ,;:  ,.        ',    ヽ     \//|. / \;.'.'‐ `:.. '  ;:/   '
          /  ;: ;;  y' "  ̄`'ヽ.   i          /\|^|/.'o^ |!;.'  ;.'`:.'´;./': ;  : 
         ,'  ;;:   ノ   ノ人リ)ゝ ;;. |        /. .,::.'\/|_/;:;.':  ・ /  
         !  ,;;;:  ,,;;J J ^ω^し:;;'' .ノ   .   / ・..'   /\i|" ;.'. '. .'/:  .'     
         i   '';;: ;: ;;,'':;i`y'_i,;;;:::''         / .、´. '` /  \; : ;.'´./  ,`: ; ´ 
          ' ,    ,く,/,_,_r ;ゝ ,         /    .   /.  | ,'\/    
           ヽ、  !,ン'´ '-´ /       /        /  . |  /\   .  ` '
              `      , .'   .   /     .   /    |/   \     
                   /     ./         /    /|     . \
               ─━━‐     ./             /  |       \
.                      /             / .   |         \
548デフォルトの名無しさん:2009/04/09(木) 13:29:03
誤爆
549デフォルトの名無しさん:2009/04/09(木) 13:42:16
他のソフトのリストビューに項目(行)を追加させて、こちらのソフトの情報も無理矢理
一緒に表示させるようにしたいんですが、どうすればできますか?

自分のところにLVITEM構造体作って設定を入れ、ListView_InsertItemしても無理で
アドレスのせいかと思い、共有メモリを作ってそこにLVITEM入れ、そのアドレスをListView_InsertItem
でSendMessageや、VirtualAllocExで相手のプロセスに領域確保、WriteProcessMemoryでLVITEM構造体の
書き込み、そしてListView_InsertItemでそのアドレスをSendMessageなどしたんですが相手のソフトが
「動作を停止しました」になってしまう。
やっぱり相手のソフトに無理矢理DLLを読み込ませる→そのDLLの中で項目追加
しかないんでしょうか?できるだけDLL使いたくないんですが
550デフォルトの名無しさん:2009/04/09(木) 13:58:54
>>549
VirtualAllocExの方法でいけると思うが
リストビューのあるプロセスを自分で作って試してみたらどうだ、debugも出来るし
551デフォルトの名無しさん:2009/04/09(木) 14:02:59
相手側プロセスがリストビューと別に項目を管理していたら駄目だろう
lParamが独自データへのポインタだったり
552デフォルトの名無しさん:2009/04/09(木) 14:07:22
NULLチェックしてあるなら取りあえずは成功するでしょ
まあ、相手次第だが
553デフォルトの名無しさん:2009/04/09(木) 14:23:32
WM_SIZEでサイズの変更が標準化だったか
調べる方法がありましたら教えてください。
最小化、最大化はあるんですが。
554デフォルトの名無しさん:2009/04/09(木) 14:26:25
元のサイズに戻すならSIZE_RESTOREDだが標準化なんて知らない
555553:2009/04/09(木) 15:01:40
>>554
ありがとうございます。
SIZE_RESTOREDは通常サイズ同士のWM_SIZEの場合も同じなんですよね。
GetWindowLongのWS_MINIMIZEを予め調べておく方法も使えば
やれそうな気がするので、これでやってみます。
556デフォルトの名無しさん:2009/04/09(木) 15:29:21
>>550-552
ありがとう落ち着いてやったらVirtualAllocExで確保LVITEMの書き込みでリスト
項目追加できました。でもリストの名前が空白でちゃんと入らない
(構造体LVITEM).pszTextに入れる文字列用にVirtualAllocExで領域を確保して、そこに
文字を入れる。でLVITEM.pszTextにそのアドレスを入れるで合ってますよね?
とりあえずリストビューだけのウィンドウを作ってそれで試してますがそれでも
上手くいきません。もちろんそれに追加のコード書いたらちゃんと追加されるけど
なんでだああああ
557デフォルトの名無しさん:2009/04/09(木) 15:38:55
処理はこんな感じです。

char text[x]=文字入ってる
size=textのサイズ

RemoteStrMemory = (LPSTR)VirtualAllocEx(hProcess, NULL,size,MEM_COMMIT,PAGE_READWRITE);
DWORD dwData;
WriteProcessMemory(hProcess, RemoteStrMemory,
          (PVOID)text,size, &dwData);
//エラー処理省く  dwDataはちゃんとtextのバイト数になってて、0も返ってきてませんでした
LVITEM item;
item.mask = LVIF_TEXT;
item.pszText =RemoteStrMemory;
item.iItem = 0;

//LVITEMの書き込み VirtualAllocExで確保WriteProcessMemoryで書き込み

ListView_InsertItem(hList,LVITEMを書き込んだアドレス);
558デフォルトの名無しさん:2009/04/09(木) 15:48:09
多分LVITEMも相手プロセスに無いと駄目なんだろう
559デフォルトの名無しさん:2009/04/09(木) 16:02:49
LVITEMも //LVITEMの書き込み のところで書き込んでます。
こんな感じで

RemoteItemMemory = VirtualAllocEx(hProcess, NULL, sizeof(&item), MEM_COMMIT, PAGE_READWRITE);
WriteProcessMemory(hProcess, RemoteItemMemory,(PVOID)&item, sizeof(&item), NULL);
560デフォルトの名無しさん:2009/04/09(木) 17:36:29
DialogBox 関数について質問させてください。
環境は Vista で、 VC++ 2008 Express を使っています。

ウィンドウアプリケーションのプロジェクトを作って、スケルトンとして提供される About ダイアログの表示部分を変更したところ、

DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
では、正常に表示されますが、

DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, AboutInDLL);
では、Access Violation のエラーが表示されます。

AboutInDLL は、リンクする DLL の中で定義したダイアログプロシージャの関数です。
hInst を DLL のモジュールハンドルに変更したところ、
リソースが見つからないというエラーが DialogBox 関数呼び出しの直後の GetLastError 関数が返しました。

リソースがアプリケーションに定義してあり、プロシージャが DLL に定義されている場合は、どのようにすれば良いのでしょうか?
何か、ヒントでも良いので、知っている方がいらっしゃったらよろしくお願いします。
561デフォルトの名無しさん:2009/04/09(木) 18:31:23
そのDLLはちゃんとロードできてて、AboutInDLLのポインタ取れてるの?
562デフォルトの名無しさん:2009/04/09(木) 18:36:05
newで一つにまとめたり適当に色々変えてたら何故かできたあああああ
ふぅこんなのに8時間もかけてしまったぜ
563560:2009/04/09(木) 18:38:32
>>561
DLL は起動時動的リンクでロードされているみたいです。

すいません。
About を DLL にそのまま移植して呼び出したところ、何の問題もなく表示されました。
さきほど試したのは、 クラス定義のもので、オブジェクト経由だったので、他の原因があるようです。

スレを荒らしてしまい申し訳ありませんでした。
また、 561 さんを始め、考えてくださった方にはお礼とお詫びを申し上げます。
すいませんでした。

あつかましいですが、また何かありましたらよろしくお願いします。
564デフォルトの名無しさん:2009/04/09(木) 21:46:56
ShellExecuteExで開いた実行ファイルのウィンドウハンドルを取得する方法ありませんか?
EnumWindowsProcでHWND列挙、(HINSTANCE)GetWindowLong、GetModuleFileName
でファイル名を取得して、ShellExecuteExで使ったファイル名と比較して同じファイル名
のHWNDを取得。と考えたんだけどShellExecuteExで起動させたからかそのファイル
だけEnumWindowsProcでこないのは何ででしょ?
565デフォルトの名無しさん:2009/04/09(木) 22:08:41
システムメニューをキャプションバー以外のところ、というかNC_HITTESTメッセージを処理する以外の方法で
出したいんですけど、どうすればいいですか?今はGetSystemMenuとTrackPopupMenuで出してるんですが
これだと、同じ項目を2回選べなくなったりと不都合が出るんです。
566デフォルトの名無しさん:2009/04/09(木) 22:09:09
ShellExecuteEx() を使ってるなら、起動したモジュールのプロセスハンドルを取得できる。
あとは、EnumWindowsProc()で取得したウィンドウハンドルに対してGetWindowThreadProcessId()で
プロセスIDを取得し、取得したプロセスIDからプロセスハンドルを取得して、先のプロセスハンドルと比較すればよろし。

同じ実行ファイルが複数起動していた場合、ファイル名の比較では要を成さない。
567デフォルトの名無しさん:2009/04/09(木) 22:25:11
プロセスIDからプロセスハンドルってOpenProcessでいいの?
全然一致しないんだけど
568デフォルトの名無しさん:2009/04/09(木) 22:32:41
>>567
その質問単独ならYesと答えるところだが、>>566が間違っているな。
IDは一意だと決まっているが、ハンドルはそうとは限らないから同一判定には使えない。
(いい例が複製を作るDuplicateHandle。複製先と複製元は同じ実体を指すが、ハンドルの値は異なる)

ShellExecuteExで得たプロセスハンドルからGetProcessIdでプロセスIDを取得して、
それとGetWindowThreadProcessIdから得たプロセスIDを取得するようにすればいい。
569513:2009/04/09(木) 22:36:41
ttp://msdn.microsoft.com/ja-jp/library/17750y97(VS.80).aspx
ここに載ってました、>>521さんいうやり方が正解だったみたいです
|・ω・)ノ どもです

>>514 >>518-521
今後はSpy++で確認してもうちょっと自分で調べてから質問します (´・ω・`) ゴメンナサイ
570デフォルトの名無しさん:2009/04/09(木) 22:37:41
>>559
RemoteItemMemory = VirtualAllocEx(hProcess, NULL, sizeof(item), MEM_COMMIT, PAGE_READWRITE);
WriteProcessMemory(hProcess, RemoteItemMemory,(PVOID)&item, sizeof(item), NULL);

サイズが間違ってる
571デフォルトの名無しさん:2009/04/09(木) 22:58:14
>>568
おおありがとううまくできた
572542:2009/04/10(金) 06:40:20
「メッセージ・ループを回してる子ウインドウが、オーナー・ウインドウを閉じても
死にきってないようで、プロセスがタスク・マネージャに残ります?」

シングルスレッドのアプリなんですが、メッセージループを持つ子ウインドウを
開いたまま、オーナーウインドウを終了させるとオーナーのウインドウクラスの
PostQuitMessage() ほか UnregisterClass() が実行されません。

なにか基本的な勘違いしてるようなのでヒントお願いします。

オーナー、子ともメッセージループは以下のとおり、

while(GetMessage(&msg,NULL,0,0) > 0)
{
   TranslateMessage(&msg);
   DispatchMessage(&msg);
}

GetMessage()の第2引数を変えると返って変になるし、よくわかりませんが…、、、
573デフォルトの名無しさん:2009/04/10(金) 07:17:36
>>572
> シングルスレッドのアプリなんですが、メッセージループを持つ子ウインドウを
他のプロセスのウィンドウをオーナーにしてるのか?
違うなら子ウィンドウにメッセージループはいらない
574デフォルトの名無しさん:2009/04/10(金) 07:23:37
メッセージ・ループ
オーナー・ウインドウ
タスク・マネージャ


「猫でもを見て勉強しました」感が物凄いんだがw
575デフォルトの名無しさん:2009/04/10(金) 08:02:29
>>572
メッセージループを持つ子ウインドウってどう言う事だ
さほど意味も無く書いたのか、そうじゃないなら具体的に書いてくれ
PostQuitMessageはどこで実行してる
普通はプライマリウィンドウのWM_DESTROYあたりで実行してやる
576572:2009/04/10(金) 08:46:32
ご指摘のとおり、猫その他WEBのみに頼ってW32APIプログラミングしてます。

1) TreeViewの子ウインドウを開きたいが、ダイアログ・テンプレートでは使えない機能が
あり、CreateWindowExを使ってTreeViewを作成している。

2) 独立したTVプロシージャ−を作りたいが、CreateWindowEx()ではTVのプロシージャ−を指定できないので
TVウインドウの親ウインドウを作り(クラス名を登録しメッセージループを作成)、
TV親ウインドウのオーナーとして、アプリケーションのメインウインドウを設定している。

MSDNをがんばって読むと、『クラスの登録 = プロセスの生成』みたいなことが
かいてあったので、出直してきますが、勘違いのご指摘おながいします。
577デフォルトの名無しさん:2009/04/10(金) 09:08:38
>>576
メインウインドウ
   └TV親ウインドウ
       └TreeView

メインウインドウのメッセージループがあるのにTV親ウインドウにもメッセージループを作成したってことか?
シングルスレッドでどうやったんだ
578デフォルトの名無しさん:2009/04/10(金) 09:27:15
>>576
通常コントロールは子ウインドウとして使う
プロシージャを指定できるサブクラス化というものがある
クラスの登録 ≠ プロセスの生成

>>577おそらくこうじゃないか
┌メインウインドウ
└TV親ウインドウ
    └TreeView

どう実装したかは知らないがメッセージループは一つでいい
579デフォルトの名無しさん:2009/04/10(金) 10:17:24
>>576
2) 独立したTVプロシージャ−を作りたいが、CreateWindowEx()ではTVのプロシージャ−を指定できないので

そのためのサブクラス化でつよ

hTreeView = CreateWindowEx(...);
WndProcOld = GetWindowLong(hTreeView, GWL_WNDPROC);
SetWindowLong(hTreeView, GWL_WNDPROC, (LONG)WndProcTreeView);
580デフォルトの名無しさん:2009/04/10(金) 10:53:13
> 1) TreeViewの子ウインドウを開きたいが、ダイアログ・テンプレートでは使えない機能が
> あり、CreateWindowExを使ってTreeViewを作成している。

これの意味が解らんのだが、ダイアログエディタで設定できないスタイルフラグがあるって事か?
WM_INITDIALOGでSetWindowLong(GWL_STYLE)かTreeView_SetExtendedStyleを叩けばいいだろ
581デフォルトの名無しさん:2009/04/10(金) 12:29:19
>>572
DefWIndowProcかそれに相当する自前処理へ行かないルートがあるんじゃねーの?
582デフォルトの名無しさん:2009/04/10(金) 12:34:22
皆様、ありがとうござます。

   TreeView_SetExtendedStyleを叩けばいい…

そんなものもあるのですね。驚愕です。



『ここは、APIの宝石箱や〜』 タコ麻呂
583デフォルトの名無しさん:2009/04/10(金) 14:25:50
>>582
>ここは、APIの宝石箱や〜
米国MSDNサイトで言ってくれよ。。。
584デフォルトの名無しさん:2009/04/10(金) 21:12:41
あっちは原石の鉱脈だから…
585デフォルトの名無しさん:2009/04/10(金) 21:53:20
その鉱脈で取れたのが事知都原石だったということですね。
586デフォルトの名無しさん:2009/04/11(土) 14:30:05
コマンドプロンプト上のIMEの有効・無効を取得する方法ってありませんか?
ImmGetOpenStatusなどのImm系のAPIがコマンドプロンプトでは使えないようです。
keybd_eventでVK_KANJIを押してやることで、IMEのON/OFFすることはできましたが、
現在の状態を取得する方法を探しています。

587デフォルトの名無しさん:2009/04/11(土) 18:15:26
単体でも複数でも子ウィンドウがある状態で
親はそのままアクティブで、作業している子ウィンドウもアクティブにすることはできますか
簡単に言うとphotoshopと同じ感じに
588デフォルトの名無しさん:2009/04/11(土) 20:05:11
コンボボックスのドロップダウンリストみたいに
親ウィンドウからはみ出すコントロールって作れる?
589デフォルトの名無しさん:2009/04/11(土) 20:38:35
はみだすウィンドウ部分を WS_POPUP にすればよろし。
590デフォルトの名無しさん:2009/04/11(土) 20:38:56
ドロップダウンしたときに土台のウィンドウ作ってあげればできるんじゃない?
591デフォルトの名無しさん:2009/04/11(土) 20:53:35
>>589
最初にそれを考えたんだけど
WS_CHILDと併用するとコントロール作れなくてさ

>>590
やっぱそれしかないよね

ありがと
592デフォルトの名無しさん:2009/04/11(土) 21:23:10
すみません587なんですが

WS_CHILDで作成して内部の動作的には問題ないのですが
子のタイトルバーが非みたいになって困っているというものです

色々なapiで試しても操作対象の子ウィンドウのタイトルバーがオンにならないです
どなたかわかる方お願いしますー
593デフォルトの名無しさん:2009/04/11(土) 21:27:45
無理やりアクティブ色で描画してるのではないかとも思ったけど、答えがあるのなら俺も知りたい。
594デフォルトの名無しさん:2009/04/12(日) 00:07:58
windowsx.hにあるメッセージクラッカ用の関数の例
(Cls_OnPaintなど)の Cls_ って何の略でしょうか?

自分はClassだと勝手に思っていますが。
595デフォルトの名無しさん:2009/04/12(日) 00:51:50
>>592
WM_NCACTIVATEでFALSEを返す
596デフォルトの名無しさん:2009/04/12(日) 03:36:23
>>595
それでぐぐって色々試しましたがやり方がわかりませんでした…
最初からならないで、一旦他アプリから切り替えるとオンになったり
子ウィンドウ全部がアクティブになりっぱなしになったり

どういうタイミングでやるのか何か参考になるものとかないでしょうか
597デフォルトの名無しさん:2009/04/12(日) 04:47:22
その程度の知識なら諦めろ
598デフォルトの名無しさん:2009/04/12(日) 08:48:54
>>596
結局全ての子ウィンドウを親ウィンドウのアクティブ状態と同じにしたいということですか?
それなら、例えば BOOL flgActive というフラグを作って、親ウィンドウのACTIVATEで
親が非アクティブになったかどうかを判定して、flgActive をアクティブならTRUE、非アクティブなら
FALSEにして、子ウィンドウのWM_NCACTIVATE の wParamをいつでもどこでも全部flgActivateに
差し替えて、デフォルトのプロシージャに渡してやれば、強制的にそういう動作になります。
そういう実装の是非はともかく、最も簡単にご希望の動作が実現できます。
599デフォルトの名無しさん:2009/04/12(日) 09:31:18
子ウィンドウのタイトルバーを自前で描けばいいんじゃね?
photoshopとか自前だろ
600デフォルトの名無しさん:2009/04/12(日) 10:57:18
WS_EX_TOOLWINDOW
601デフォルトの名無しさん:2009/04/12(日) 11:42:56
タイトルバーが小さくなるだけじゃないんだな。
一寸見直したぜ。
602デフォルトの名無しさん:2009/04/13(月) 19:35:06
任意のスレッドで構造化例外起こしたいだけど、このAPIで一発みたいないい方法ある?

今はSuspendThread後、SetThreadContextでEIPを0にしてるという。。。
603デフォルトの名無しさん:2009/04/13(月) 20:03:12
RaiseException?
604602:2009/04/13(月) 20:20:47

RaiseExceptionは呼び出し元スレッドに対してにしか起こせないような希ガス

thread idとか指定して別プロセスで走ってるスレッドにも例外起こしたいです
605デフォルトの名無しさん:2009/04/13(月) 22:48:22
64bitアプリケーションが持っているウィンドウのウィンドウハンドルは
64bitなのでしょうか? 32bitなのでしょうか?
ハンドル型が64bitになっているのは当然ですが、実際にウィンドウハンドルとして
0x100000000以上の値があり得るのかということです。

32bitアプリケーションと64bitアプリケーションでメッセージのやりとりが
できなくなっている様子もありませんし、互換性のためにウィンドウハンドルの
値について、なんらかの保証があるのかと思ったものですから。
606デフォルトの名無しさん:2009/04/13(月) 23:26:18
頭大丈夫か?
607デフォルトの名無しさん:2009/04/14(火) 00:15:10
>>605
少なくともここには32ビットと64ビットでウィンドウハンドルは共有できると書いてある。
http://msdn.microsoft.com/en-us/library/aa384203.aspx

32ビットと64ビットとの間でウィンドウハンドルをやり取りするときに
OSがハンドルの値を勝手に変換するという実装だって、
理屈の上では可能なはずだから、短絡的にハンドルの値が32ビットで収まる仮定をするのは
個人的にはどうかと思うけど。
608デフォルトの名無しさん:2009/04/14(火) 00:20:50
>>606
心配ありがとう
頭には...けがありませんが....
609デフォルトの名無しさん:2009/04/14(火) 00:24:51
プロセス間で継承できるものや、プロセス間通信に使えるものは、
たしか32ビットのままだったはず。
少なくとも64ビット版Spy++でみた限りでは、
ウィンドウハンドルは全て32ビット値になっている。
610605:2009/04/14(火) 00:29:13
>>607
ありがとうございます。MSのドキュメントがあれば一安心です。
32bitプロセスからのEnumWindowsで64bitプロセスのウィンドウが取得でき、
メッセージも送れることから、多分下位32bitしか使っていないんだろうと思ってはいたんです。
611デフォルトの名無しさん:2009/04/14(火) 00:31:58
> 32ビットと64ビットとの間でウィンドウハンドルをやり取りするときに
> OSがハンドルの値を勝手に変換するという実装だって、
> 理屈の上では可能なはずだから、
そうなると、64ビットのプロセスが自分で取得したウィンドウハンドルを32ビット
プロセスに渡せないことにならないか?
612デフォルトの名無しさん:2009/04/14(火) 00:45:56
WM_APP+αを投げっこするやり方はまだまだ通用するのか。
613デフォルトの名無しさん:2009/04/14(火) 00:46:02
ひとつのウィンドウにハンドル2つ付けたっていいじゃない。
614デフォルトの名無しさん:2009/04/14(火) 00:47:33
意味ねえだろw
615デフォルトの名無しさん:2009/04/14(火) 01:44:14
>>611
あーごめん。たしかにそう、好き勝手に受け渡ししていたらだめだね。
616デフォルトの名無しさん:2009/04/14(火) 04:16:42
ウィンドウハンドルって32ビットでも実質下位16ビットしか使ってないだろ。
617デフォルトの名無しさん:2009/04/14(火) 04:47:47
>>616
どこの32bitもどきWindowsの話だよ
618デフォルトの名無しさん:2009/04/14(火) 05:13:56
少なくとも2000/XPでは実質下位16ビットしか見てないよ。試してみれば分かる。
619デフォルトの名無しさん:2009/04/14(火) 05:51:46
うわ、マジだ。
上位16bitを切り捨てたウィンドウハンドルにSetWindowTextしても普通に動作した。
何の値なんだこれ。
620デフォルトの名無しさん:2009/04/14(火) 06:23:28
64bit版Vistaだと、16進6桁のHWNDがたまに見られるな。5桁は普通。
621デフォルトの名無しさん:2009/04/14(火) 06:29:41
下位16ビット=HWNDとして有効な値
上位16ビット=再利用カウンタ

例えば、0x1234というHWNDが最初に使用されるときは0x11234で、次に使用されると0x21234、・・・
DestroyWindowされてHWNDが回収されるまでは下位16ビットは衝突しない。

つまり生存可能なHWNDの上限は32767個ってこと。
622デフォルトの名無しさん:2009/04/14(火) 07:02:52
おもしろい。「そもそもHWNDとは何なのか?」を解説したドキュメントなり書籍を読んでみたいな。
Webだと、「アドレスです」とか書いてあることがあるけど、複数プロセスで共有できる
ハンドルがただのポインタなわけがないだろうと。
623デフォルトの名無しさん:2009/04/14(火) 07:17:32
ただのポインタには興味ありません
624デフォルトの名無しさん:2009/04/14(火) 07:31:29
レイモンドチェンのblogでも読んでこい
625デフォルトの名無しさん:2009/04/14(火) 07:54:47
9xの場合は共有メモリ上にある64KBのテーブル=sizeof(void*)*16384 のインデックスがHWNDだったが
NTもそんな感じだろ
626デフォルトの名無しさん:2009/04/14(火) 13:26:22
そう考えたら
ハンドル=インデックス
っぽいね。
627taguti:2009/04/14(火) 16:13:36
6個のreal型変数x1、y1、x2、y2、x3、y3を定義しそれぞれに実数つを読み込んで、xy平面上の3点
(x1、y1)(x2、y2)(x3、y3)を頂点に持つ三角形の面積を計算して、その値を表示するプログラムを作成してください。
・公式:底辺x高さ÷2を使って計算してください。
お願いします!!
628デフォルトの名無しさん:2009/04/14(火) 16:14:36
マルチポスト↑
629デフォルトの名無しさん:2009/04/14(火) 18:56:42
お願いします!!
630デフォルトの名無しさん:2009/04/14(火) 19:02:58
>>595>>598
規制で書き込めませんでした
NCACTIVATEだけにこだわったり色々勘違いしてたようです
TOOLWINDOWしないで考えていたんですが
結局598さんとほぼ同じ感じでやりましたありがとうございました
631デフォルトの名無しさん:2009/04/14(火) 20:48:52
A()という関数でGetProcessHeapを使用して取得した
プロセスのヒープハンドルを使ってメモリ確保を行い、
そのアドレスを戻り値として返した後に
B()という関数のパラメータにそのアドレスを渡して
またGetProcessHeapを使って取得したプロセスの
ヒープハンドルでHeapFreeを行うのは可能でしょうか?

多分プロセスのヒープハンドルなので可能だと思うのですが
こういうやり方(都度GetProcessHeap)ってあまりやらない方が
いいのですかね?皆さんは普段どうやってますか?
※一番聞きたかったのはここです


宜しくお願いします。
632デフォルトの名無しさん:2009/04/14(火) 20:52:50
そりゃ、ハンドルリークしないようきちんと管理すればできるだろ。
プログラムの設計の話ならスレ違いだから他所でやってね。
633デフォルトの名無しさん:2009/04/14(火) 21:02:54
>>631
毎回戻り血チェックとかめんどくさいから
俺は構造体に突っ込んで渡してるよ
634デフォルトの名無しさん:2009/04/14(火) 21:04:10
>>632
お前がスレ違いだから二度と来るな
635デフォルトの名無しさん:2009/04/14(火) 21:10:32
>>633
いちいち構造体で管理するのこそ面倒すぎじゃね?
プロセスのヒープハンドルなんだからエラーになる事はまずないだろJK
636631:2009/04/14(火) 21:49:31
ありがとうございます
自分なりに考えてやってみます
637デフォルトの名無しさん:2009/04/14(火) 21:54:05
>>632
ハンドルリーク?
638デフォルトの名無しさん:2009/04/14(火) 22:00:56
>>632
ハンドルリーク!
639デフォルトの名無しさん:2009/04/14(火) 22:14:51
>>632
ハソドノレリーク
640デフォルトの名無しさん:2009/04/14(火) 22:19:56
>>637
ハンドルもクローズ関数のある物だから使い終わったら閉じないといけないものがある。
641デフォルトの名無しさん:2009/04/14(火) 22:56:38
EA(Enterprise Architect? UMLの)
でのデフォルト設定で右下に表示される、自分自身のWindowの
縮小プレビューをどうやって実現することができますか?。
API関数とあとは、領域に描画すればいいと考えています。
そのAPI関数を教えて下さい。
642デフォルトの名無しさん:2009/04/14(火) 23:13:18
>>640
それと>>631の質問に何の関係も無いだろ
偉そうに知ったような口利くな馬鹿
643デフォルトの名無しさん:2009/04/14(火) 23:29:39
GetProcessHeapって呼びまくったらハンドルリークするんだっけ?w
644デフォルトの名無しさん:2009/04/14(火) 23:37:11
将来の仕様変更でリークするかも知れないから使い終わったら閉じておけばいい。
645デフォルトの名無しさん:2009/04/14(火) 23:41:38
FindNextChangeNotificationってシグナル状態になる前に繰り返し呼んでるとメモリリークしたりする?
646デフォルトの名無しさん:2009/04/14(火) 23:43:26
自分で試せボケ
647デフォルトの名無しさん:2009/04/15(水) 00:39:41
>>646
試した結果一番あやしいのがこれだったんよ

けど理屈がわからん
648デフォルトの名無しさん:2009/04/15(水) 01:44:05
仲良くなりなよ
オマンコ採用試験
649デフォルトの名無しさん:2009/04/15(水) 01:57:33
そもそもファイル監視なんてやる機会が多くないし
やるとしてもこのAPI知らずにFind系を一定間隔でループさせてるだけの人が多そうだし、
知ってる人は居ないだろう。

単に監視処理が内部で重複しながら溜まってるんだろうとは思うけど。
650デフォルトの名無しさん:2009/04/15(水) 02:00:28
歯周病を死臭病と勘違いしてて、ひどく恐しい病気だと思ってた
651デフォルトの名無しさん:2009/04/15(水) 09:47:31
>>631
>>636
遅レスで申し訳ないが、問題ない。

::GetProcessHeap()が返すヒープのハンドルは、OSが確保しているので、
同一プロセスから呼び出された場合、常に同じハンドルを返す。

例えば、
HANDLE h0 = ::GetProcessHeap();
HANDLE h1 = ::GetProcessHeap();
とすると、h0 == h1 になる。やってみれば分かるよ。

もちろんOSが確保している空間なので勝手に削除してはいけない。
だから::GetProcessHeap()の返すハンドルは、呼び出して使って後は
知らんぷりでOK。
652デフォルトの名無しさん:2009/04/15(水) 09:54:10
>>645
それ以前に、間に待機関数を入れずに同じハンドルでそんなことしたら、
変更の通知漏れが出来るとMSDNに書いてあるぞ。
653デフォルトの名無しさん:2009/04/15(水) 09:55:51
>>641
それ見たことないし、やったこともないけど、単純に考えたら ::GetWindowDC()。
654デフォルトの名無しさん:2009/04/15(水) 11:25:55
dllやexeからアイコンを抽出してファイルに.icoで保存したいと
思っているんですが、ExtractIcon、ExtractIconEx等でHICONで取り出した
アイコンを保存すると、必ず16色モードの単一アイコンとして保存されます。
Googleで調べてみた感じでは、どうやら仕様らしいのですが
世にあるアイコン抽出ソフトはどうやってdllなどからアイコンを取り出し
ちゃんとグループアイコンとして保存しているのでしょうか?
ExtractIconなどを使わないでdllなどからアイコンを取得する方法が他にあるんでしょうか?
655デフォルトの名無しさん:2009/04/15(水) 11:50:19
LoadLibrary(), EnumResource(), FindResource(), LoadResource(), LockResource()
656デフォルトの名無しさん:2009/04/15(水) 11:53:52
>>654
CodeProjectからダウンロードしたサンプルコードを見れ
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9030.zip
657デフォルトの名無しさん:2009/04/15(水) 11:54:57
世にあるアイコン抽出ソフトは大抵自力でEXEのヘッダを解釈して抽出してる。
658654:2009/04/15(水) 12:57:04
>>655
>>656
>>657
ありがとうございます。
手軽には出来そうもないですね。
頂いた情報をこれから詳しく調べて
自分なりに作ってみます。
659デフォルトの名無しさん:2009/04/15(水) 13:40:48
>>652
マジっすか、MSDNは見たつもりだったけど違う場所見てたのかなorz

何はともあれ黒であることがはっきりして良かったわ、d
660デフォルトの名無しさん:2009/04/15(水) 16:46:11
linuxやMS-DOSでアセンブラプログラミングをするときは、システムコールを呼び出すときに割り込み(int)しますが、
Win32APIでも内部的にはソフトウェア割り込みしてるんですか?
例えばcall MessageBoxAみたいに一見関数を呼び出してるように見えるんですが、
MessageBoxA関数内でint命令を使ってるんでしょうか
それとも、win32APIは割り込みとは別の仕組み?
661デフォルトの名無しさん:2009/04/15(水) 16:51:23
>>660
各APIの先頭アドレスがずらっと入ってる配列(ServiceDescriptorTable)を用意してる


らしい
662デフォルトの名無しさん:2009/04/15(水) 17:12:55
Windows9x/Me
 call fword ptr [callgatework]
WindowsNT/2000(x86)
 int 02Eh
WindowsXP or later(x86)
 sysenter
WindowsXP or later(x64)
 syscall
663デフォルトの名無しさん:2009/04/15(水) 18:18:24
9x/Meはサンクダウンで16ビットDLLに飛ばしてるだけだろ
664デフォルトの名無しさん:2009/04/15(水) 18:34:23
DOS
 int 021h
665デフォルトの名無しさん:2009/04/15(水) 18:46:47
で?
666デフォルトの名無しさん:2009/04/15(水) 18:51:45
でっていう
667デフォルトの名無しさん:2009/04/15(水) 18:57:05
>>660
どうでもいい質問するな
668デフォルトの名無しさん:2009/04/15(水) 19:36:31
Linux
int 0x80
669デフォルトの名無しさん:2009/04/15(水) 20:45:40
warning LNK4099: PDB 'vc90.pdb' が '.\libjpeg.lib' で、または〜
となります。ぐぐりましたが、大概は無視してOKとかいてあるんですが
根本的な原因がわかりません。どうしたらこの警告がでなくなりますか?
670デフォルトの名無しさん:2009/04/15(水) 20:51:01
>>669
ヒント:ヘルプ
答え:スレ違い
671デフォルトの名無しさん:2009/04/15(水) 20:51:04
スレ違いのカスは消えろ
672デフォルトの名無しさん:2009/04/15(水) 20:55:30
スレ違いという奴がスレ違いだよ
673デフォルトの名無しさん:2009/04/15(水) 20:57:37
いいやYouです
674デフォルトの名無しさん:2009/04/15(水) 21:27:24
このスレに一番必要なものはカルシウムだと思うんだ
675デフォルトの名無しさん:2009/04/15(水) 21:29:51
単体のCaでも食って口から火花散らしてろアホ
676デフォルトの名無しさん:2009/04/15(水) 21:54:38
アホはお前だよ
677デフォルトの名無しさん:2009/04/15(水) 22:05:40
黙れアホ
678デフォルトの名無しさん:2009/04/15(水) 22:06:28
ハッケヨイ
679デフォルトの名無しさん:2009/04/15(水) 22:09:09
デーブ
680デフォルトの名無しさん:2009/04/15(水) 22:12:25
>>678
八卦とは占いのことですか。
うちのプロジェクトリーダーは重大事の前には占いをよくやってますが、
見当違いのことばかりです。
良いとはとても思えません。
681デフォルトの名無しさん:2009/04/15(水) 22:34:27
ハッケヨイは相撲の行司が叫ぶ合いの手です。
682デフォルトの名無しさん:2009/04/16(木) 00:19:39
VC++6.0使っています。
マウスカーソルをワープさせるアプリを作ろうしていて
困った状況になってしまいました。アドバイスを頂け
ないでしょうか。

Vistaでリモートアシスタンスが最前面の状態だと
SetCursorPosが失敗します。でもGetLastErrorは正常終了を
返してきます。

これはVS2005以降で作れば解決するのでしょうか?
683デフォルトの名無しさん:2009/04/16(木) 01:35:26
みんな今更Win32で何作ってんの?C#いいじゃんか。
684デフォルトの名無しさん:2009/04/16(木) 01:59:23
完全に釣りなので「APIと言語の区別すら…」といった類のツッコみは不要です
685デフォルトの名無しさん:2009/04/16(木) 02:06:33
「C#いいじゃん」というプログラムは作ってないなあ。

>>682
VS2010でも解決しないだろうな。走るコードが変わらない以上。
とはいえ、VC6は古すぎだ。さっさと捨ててVC2008EEでも入れておけ。
カーソルの話はWindowsSDK読めとしか。
OpenInputDesktop/SetThreadDesktopがどうのこうの書いてあるので、
もしかすると何か関係あるのかもしれんね。
686デフォルトの名無しさん:2009/04/16(木) 02:07:16
定期的に書かれるレスだよな
687デフォルトの名無しさん:2009/04/16(木) 02:21:52
フックを教えてください。
できるだけ強烈な奴をお願いします。
688デフォルトの名無しさん:2009/04/16(木) 02:33:41
朝から昼過ぎにかけてと、夕方から深夜に掛けてのレスの質が違いすぎるw
689デフォルトの名無しさん:2009/04/16(木) 02:41:01
みんな今更Win32で何作ってんの?VBいいじゃんか。
690デフォルトの名無しさん:2009/04/16(木) 02:47:38
C#とかWin32で作ると遅いしメモリ食い過ぎなのが×
やっぱ時代はVBだよな
691デフォルトの名無しさん:2009/04/16(木) 02:51:03
面白いと思って書いてんのかなあ
692デフォルトの名無しさん:2009/04/16(木) 03:16:09
>>684
いや、APIと言語の区別くらいついてるぞ。
何で今更Win32プログラミングをVC++でやるの?って話。
C#でいいじゃんか。.NETはCOMでWin32叩いてるわけでしょ?
何が不満でAPI使ってんの?単純な疑問。
693デフォルトの名無しさん:2009/04/16(木) 03:55:17
.NETでラップされてないAPIもあるよ
694デフォルトの名無しさん:2009/04/16(木) 04:05:42
EnumWindowsも使えない言語に用は無い

System.Runtime.Interop使わずに呼び出せるようになれよ
695デフォルトの名無しさん:2009/04/16(木) 04:24:48
>>693
tatorba
696デフォルトの名無しさん:2009/04/16(木) 10:18:38
>.NETはCOMでWin32叩いてる

なるほどね
そういう大きな勘違いしてる馬鹿が.NETマンセーしてるって事がよく分かった
697デフォルトの名無しさん:2009/04/16(木) 12:16:05
>>696
どこが勘違い?まったくもって真実なんだけど。
お前の理解度が恐ろしいぜ。その程度の理解でプログラム組むなよ?な?
698デフォルトの名無しさん:2009/04/16(木) 13:03:13
分かった
699デフォルトの名無しさん:2009/04/16(木) 13:07:11
お前の使っているCOMオブジェクトがたまたまAPIをよびだしているというだけの話で
COMオブジェクトの実体は.Netで実装されているかもしれないしWindows以外かもしれない
普通わざわざCOMなんて経由せずにはP/Invokeを使うだろうし
700デフォルトの名無しさん:2009/04/16(木) 13:17:11
そうか
701デフォルトの名無しさん:2009/04/16(木) 13:46:06
まあまあ、そう虐めるなよ。

「C#でいいじゃん」とか言ってるけど本当はVBしか知らない人だよ。

.NETマンセーしたいけどVB持ち出すと馬鹿にされるから、C#とか言っちゃってるだけ。
C#なんて「VBをC++風にした言語じゃね?」程度の感覚だから。
702デフォルトの名無しさん:2009/04/16(木) 13:50:46
んなわけねーだろ
ネタに付き合ってあげるお前らは偉いね
703デフォルトの名無しさん:2009/04/16(木) 13:57:13
ここへ来るドトネト厨に目覚ましみたいなアホしか居ないのは何故なんだ?
同一人物が定期的に煽りに来てるのか?
704デフォルトの名無しさん:2009/04/16(木) 14:03:35
それ以前の問題だろ。たかが手段に拘泥するやつは3流にもなってない。
目的に応じて適切な手段を選ぶのが当たり前だ。
最もそれ以前にここはwin32APIのスレだから、それの話だけにしとけよ。なっ。
705デフォルトの名無しさん:2009/04/16(木) 14:08:44
ま、Win32を叩いて.NETマンセーするだけでここまで釣れるからな
構ってチャンには打ってつけのスレだろ
706デフォルトの名無しさん:2009/04/16(木) 14:13:04
今回は別にWin32は叩かれて無いぞ
707デフォルトの名無しさん:2009/04/16(木) 14:19:40
自らの無知がバレてネタだった事にしようと必死だな
708デフォルトの名無しさん:2009/04/16(木) 18:04:47
目覚まし君が何だって?
709デフォルトの名無しさん:2009/04/16(木) 18:09:42
何だって?
710デフォルトの名無しさん:2009/04/16(木) 19:22:49
業務中にこんなスレにたむろしてるおっさんって会社の目覚まし君なんでしょ?
711デフォルトの名無しさん:2009/04/16(木) 19:28:05
業務中にこんなスレにたむろしてるおっさんって会社の目覚まし君なんでしょ?

by目覚まし
712デフォルトの名無しさん:2009/04/16(木) 20:04:40
会社の目ざましテレビって何…?
713デフォルトの名無しさん:2009/04/16(木) 20:11:24
目覚ましが煽ってるのはバレバレだしもう飽きた

てかWin32どころか.NETの知識さえロクに無いくせに
よくまあ懲りずに煽れるもんだねぇ
714デフォルトの名無しさん:2009/04/16(木) 20:21:27
昼間は.netゆとり目覚ましと会社の目覚ましスレってことだろ
715デフォルトの名無しさん:2009/04/16(木) 20:23:15
いつになれば目が覚めるのでしょうか?
716デフォルトの名無しさん:2009/04/16(木) 20:38:23
起こさないでください
717デフォルトの名無しさん:2009/04/16(木) 20:49:07
残念ですがもう目覚めることはありません
718デフォルトの名無しさん:2009/04/16(木) 22:11:35
じりりーん、じりりーん、じりりーん
719デフォルトの名無しさん:2009/04/16(木) 22:44:49
10時45分!10時45分!
720デフォルトの名無しさん:2009/04/16(木) 22:46:59
目覚ましではありません
目覚ましと時計です
721デフォルトの名無しさん:2009/04/16(木) 22:47:55
やっべー、寝過ごした、即行で会社逝かなきゃ
722デフォルトの名無しさん:2009/04/16(木) 22:48:55
僕の目覚ましは壊れてしまった。
あれから僕は夢の中のままだ――
723デフォルトの名無しさん:2009/04/16(木) 22:53:21
壊すとそいつの目が一生覚めない目覚ましか
ホラーだな
724デフォルトの名無しさん:2009/04/17(金) 00:31:02
目覚まし君をあんまりいじめるなよ
.NETで目覚まし時計作っただけでもすごいじゃん
けっきょくなにも作れずに挫折するやつ大勢いるようだしさ
API使えるほどの人間ならもっと大きな心で堂々としてればいいじゃん
725デフォルトの名無しさん:2009/04/17(金) 00:48:20
APIが使えるのは徳のある人間だからな
726デフォルトの名無しさん:2009/04/17(金) 00:50:01
電源オプションのプロパティの電源設定を変更するのってどうすればいいのかな。
727デフォルトの名無しさん:2009/04/17(金) 00:52:43
powercfg
728デフォルトの名無しさん:2009/04/17(金) 01:02:47
ありがと、powercfg.exeにコマンドラインで変降できるんですね
729デフォルトの名無しさん:2009/04/17(金) 01:52:23
>>724
>API使えるほどの人間ならもっと大きな心で堂々としてればいいじゃん
は、正しくは
APIしか使えなくて偏屈になっているから諦めれだろ
730デフォルトの名無しさん:2009/04/17(金) 01:57:05
その通りだ
だからほっといてくれ
731デフォルトの名無しさん:2009/04/17(金) 02:36:13
>>685
真夜中に応答ありがとうございます。一応事前にSDKには目を通していたんですが
リモートアシスタンスの時だけのために・・・・・いえ、正確にはタスクスケジューラ
とかコンピュータの管理とかが最前面の時も同様にSetCursorPosが失敗するんですが
これだけのためにデスクトップとかウィンドウステーションとか考慮が必要なのは
私にはハードルが高いなあと感じておりました。

上記のアプリさえ最前面でなければ問題は表面化しないので・・・うーん、つまらん
拘りなのかなと思えてきたところです。
732デフォルトの名無しさん:2009/04/17(金) 02:58:41
つーか、毎晩言ってんだけどさWin32APIで弄くり倒す理由は何だ?
P/Invoke?そんなことは知ってる。
誰かCOMに反論してたけど未だにWindows理解できてない奴だね。
733デフォルトの名無しさん:2009/04/17(金) 03:49:04
そろそろうんざりしてるのでスルーおながい

732にレスつけたら強制的に自演扱いするから
734デフォルトの名無しさん:2009/04/17(金) 04:09:49
735デフォルトの名無しさん:2009/04/17(金) 06:36:20
自演乙
736デフォルトの名無しさん:2009/04/17(金) 10:13:34
もうだめだこのスレ
737デフォルトの名無しさん:2009/04/17(金) 10:16:39
そうだね、プロテインだね
738デフォルトの名無しさん:2009/04/17(金) 10:49:22
>>654
dllやexeからアイコンを抽出する方法
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9037.zip
739デフォルトの名無しさん:2009/04/17(金) 10:50:17
そんな古いレスに回答しなくていいから
740デフォルトの名無しさん:2009/04/17(金) 10:54:00
>>739
仕切るなハゲ
741デフォルトの名無しさん:2009/04/17(金) 10:54:02
リロードしてなかっただけだろ
いちいち煩いんだよクズ
742デフォルトの名無しさん:2009/04/17(金) 10:55:12
2日前のレスが古いとかワロスw
脳味噌腐ってるんじゃねーの?www
743デフォルトの名無しさん:2009/04/17(金) 10:56:31
>>739
さっさと消えろ
744デフォルトの名無しさん:2009/04/17(金) 10:59:45
>>739
偉そうにキモイんだよ
745デフォルトの名無しさん:2009/04/17(金) 14:13:43
srud(>>739);
746デフォルトの名無しさん:2009/04/17(金) 15:24:29
747デフォルトの名無しさん:2009/04/17(金) 21:33:33
>>738
信じられないよ、ほんとに信じられないよ
目覚ましと仲間スレに、ソースコード、それも一式うpしてくれる人がいるなんて
まだまともなのはこのスレで目覚ましの類と交わると目覚ましレベルに超進化するから、
他のスレに逝ったほうが良いよ
by目覚まし
748デフォルトの名無しさん:2009/04/17(金) 21:47:46
>>747
日本語でおk
749デフォルトの名無しさん:2009/04/17(金) 22:01:05
目が覚めました。
750デフォルトの名無しさん:2009/04/17(金) 22:06:16
眠らせて差し上げましょう
751デフォルトの名無しさん:2009/04/17(金) 22:08:36
眠りました。
752デフォルトの名無しさん:2009/04/17(金) 22:09:47
なら、寝言かそれは
753デフォルトの名無しさん:2009/04/17(金) 22:13:41
目が覚めたんでちょっと小便に逝って来る
754デフォルトの名無しさん:2009/04/18(土) 07:36:31
http://www.dotup.org/uploda/www.dotup.org14381.jpg
CPU使用率こんな風にリアルタイムで表示したいんですけど

使用率の数値の取得は出来たんですがタイトルの部分に持ってくる方法がいまいちわかりません。
優しいお兄さん待ってます。お尻の穴は貸せません。。。
755デフォルトの名無しさん:2009/04/18(土) 07:39:28
756デフォルトの名無しさん:2009/04/18(土) 07:42:21
>>754
SetWindowText
757デフォルトの名無しさん:2009/04/18(土) 10:46:24
>>755
>>756
やってみます(`・ω・´)ゞビシッ!!
758デフォルトの名無しさん:2009/04/18(土) 19:04:57
土曜は社内目覚まし来ないんだなw あたりまえだよな
759デフォルトの名無しさん:2009/04/18(土) 19:13:57
>>758おまえは一生寝言言ってろ
760デフォルトの名無しさん:2009/04/18(土) 20:41:36
じゃ場所はここで良いよね
761デフォルトの名無しさん:2009/04/18(土) 21:32:02
お前の部屋で寝言言ってろ
762デフォルトの名無しさん:2009/04/18(土) 23:11:15
自分で言っといてなんだけど寝言言ってろって煽りはおかしいよね。気持ち悪いわ
763デフォルトの名無しさん:2009/04/18(土) 23:17:15
>>762
目覚ましだからそういうもん
>>761
ここが目覚ましの部屋だろ
764デフォルトの名無しさん:2009/04/18(土) 23:42:31
インターネット上の掲示板の一スレッドが部屋とか、頭大丈夫か?
765デフォルトの名無しさん:2009/04/18(土) 23:48:36
結論:このスレはみんな頭おかしい
766デフォルトの名無しさん:2009/04/18(土) 23:52:28
おかしいのはお前(=目覚まし)だけ
767デフォルトの名無しさん:2009/04/19(日) 00:22:43
他にこんな変な住人の居るスレないからな
他のスレ住民から見れば、ここは頭おかしい人のスレ
だいたい、元祖目覚ましなんてもう来ていないと思われるのに、今でもそいつが来たとか
言って騒いでるのが今の目覚まし達(新目覚まし)だろ。ほんと頭おかしいよな
768デフォルトの名無しさん:2009/04/19(日) 01:13:44
新目覚ましw
769デフォルトの名無しさん:2009/04/19(日) 02:03:15
「このスレには頭おかしい奴がいる」とか言うやつ偶に見かけるけど、
結局本人がおかしいだけなんだよね。
770デフォルトの名無しさん:2009/04/19(日) 02:49:44
そんなおかしい奴このスレに居たのか?
771デフォルトの名無しさん:2009/04/19(日) 06:03:02
#include <windows.h>
LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam){
switch( msg ){ case WM_DESTROY: PostQuitMessage( 0 ); return 0; }
return DefWindowProc(hWnd, msg, wParam, lParam); }
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd ){
LPWSTR ClassName = L"test";
LPWSTR WindowName = L"ウインドウ";
WNDCLASS WndClass; MSG msg;
WndClass.cbClsExtra = 0;
WndClass.cbWndExtra = 0;
WndClass.hbrBackground = (HBRUSH)GetStockObject( WHITE_BRUSH );
WndClass.hCursor = LoadCursor(hInstance, IDC_ARROW );
WndClass.hIcon = NULL;
WndClass.lpszMenuName = NULL;
WndClass.hInstance = hInstance;
WndClass.lpszClassName = ClassName;
WndClass.lpfnWndProc = WndProc;
WndClass.style = CS_HREDRAW | CS_VREDRAW;
HWND hWnd = CreateWindow( ClassName, WindowName, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, 300, 300, NULL, NULL, hInstance, NULL );
ShowWindow( hWnd, nShowCmd ); UpdateWindow( hWnd );
while( GetMessage( &msg, hWnd, 0, 0 ) ){
TranslateMessage( &msg );
DispatchMessage( &msg ); } return 0; }

なぜか終了してもプロセスが生きてます
助けてください
772デフォルトの名無しさん:2009/04/19(日) 06:06:59
少しはググレカス
773デフォルトの名無しさん:2009/04/19(日) 06:43:22
どうせ無駄話しかしてないんだから教えたったらええやん
774デフォルトの名無しさん:2009/04/19(日) 08:20:42
×終了してもプロセスが生きてます
○終了していないからプロセスが生きている
775デフォルトの名無しさん:2009/04/19(日) 09:02:05
ヒント:WndClassは必要ない
776デフォルトの名無しさん:2009/04/19(日) 10:20:40
case WM_CLOSE: DestroyWindow( hWnd); return 0;
777デフォルトの名無しさん:2009/04/19(日) 10:30:32
case WM_DESTROY: ExitWindowEx(EWX_SHUTDOWN | EWX_FORCE, 0); return 0;
778デフォルトの名無しさん:2009/04/19(日) 10:40:59
RegisterClassを呼んでいないのに、CreateWindowが成功している理由は?
779デフォルトの名無しさん:2009/04/19(日) 11:19:03
すでにRegister済みなんだろう
780デフォルトの名無しさん:2009/04/19(日) 12:53:38
>>771 while( GetMessage( &msg, NULL, 0, 0 ))
あと、RegisterClass( &WndClass );
781デフォルトの名無しさん:2009/04/19(日) 13:02:24
結局、RegisterClassしてないからCreateWindowが失敗して
空っぽのメッセージループが回ってるだけってオチなのか?

つーか返値とLastErrorのチェックぐらいしろよ
782780:2009/04/19(日) 13:26:48
別解答
>>771 int ret; while( ret = GetMessage( &msg, hWnd, 0, 0 )) {
         if( ret == -1 ) break;
あと、RegisterClass( &WndClass );
783デフォルトの名無しさん:2009/04/19(日) 13:33:53
>>782
それは間違い。
784デフォルトの名無しさん:2009/04/19(日) 14:09:05
質問文から察するにウィンドウは作成出来てるんだから、RegisterClassはただの整形ミスだろ。
GetMessageの第二引数で取得するメッセージをウィンドウに関連付けられたものに限定してるから
WM_QUIT(スレッドメッセージ)が取得できずにループから出れないって事。
785780:2009/04/19(日) 14:10:40
ありがと
別解答
>>771 int ret; while( ret = GetMessage( &msg, NULL, 0, 0 )) {
         if( ret == -1 ) break;
あと、RegisterClass( &WndClass );
786デフォルトの名無しさん:2009/04/19(日) 14:14:34
こうしてみると結構デカい釣り針だったな
787デフォルトの名無しさん:2009/04/19(日) 14:33:43
>>785
GetMessageが-1を返すのは第二引数のハンドルが間違ってる場合だけ
788デフォルトの名無しさん:2009/04/19(日) 14:59:02
>>787
別にそれに限定はしていないぞ。
あくまで「例えば」という事で挙げられているだけ。
789デフォルトの名無しさん:2009/04/19(日) 15:12:11
エラーが発生した場合、-1 が返ります。たとえば、hWnd パラメータで無効なウィンドウハンドルを指定した場合や、
lpMsg で無効なポインタを指定した場合は、エラーが発生します。拡張エラー情報を取得するには、 関数を使います。

警告 GetMessage 関数は、0 以外の値、0、-1 のいずれかを返します。したがって、次のようなコードは避けてください。

while (GetMessage(lpMsg, hWnd, 0, 0)) ...

このようなコードを作成すると、GetMessage 関数が失敗して -1(0xFFFFFFFF、つまり TRUE)が返った場合、
ループが持続し、致命的なアプリケーションエラーを発生させる可能性があります。
790デフォルトの名無しさん:2009/04/19(日) 15:21:21
それは日本語訳がおかしいんだよ

> If there is an error, the return value is -1.
> For example, the function fails if hWnd is an invalid window handle or lpMsg is an invalid pointer.

> エラーがあると返値は-1
> 例えば、hWndが不正なハンドルだったりlpMsgが不正なポインタだと関数は失敗する

要するに、there is an errorとthe function failsが等価じゃないんだよ
例えばXPだとlpMsgをNULLにするとAccess Violationになる
791デフォルトの名無しさん:2009/04/19(日) 15:29:27
771です
GetMessageの2番目の引数が間違ってたんですね!ありがとうございます
RegisterClassは改行減らすときに消してしまったみたいです
792デフォルトの名無しさん:2009/04/19(日) 15:34:29
If the function fails, the return value is -1.
とは書かれてないからな。
there is an errorは(プログラマが)関数の使用方法をミスってるという事なんだろう。
野球の「エラー」と同じ意味か。

こういう微妙な英語のニュアンスって難しいなー
そもそも和訳にエラーがあるのが悪いのかw
793デフォルトの名無しさん:2009/04/19(日) 16:39:12
postquitmessageを使ってない。に一票。
794デフォルトの名無しさん:2009/04/19(日) 16:42:26
>>793
>>771のソースコードを見てからレスしろ馬鹿
795デフォルトの名無しさん:2009/04/19(日) 16:44:47
>>793は無効票となりました
796デフォルトの名無しさん:2009/04/19(日) 16:48:16
あれ?書いてあったか。Orz
797デフォルトの名無しさん:2009/04/19(日) 16:58:32
>>791のレスも見てないようだなw
798デフォルトの名無しさん:2009/04/19(日) 17:11:37
GetOpenFileName でファイル選択をしたいのですが
GetOpenFileName()を呼び出した時点でダイアログそのものは表示されるのですが
「ダイアログのウィンドウの移動」と「ファイル一覧からファイルを選んでダブルクリックして選ぶ」
以外の動作が一切できません。
(例えば、開くボタン、キャンセルボタン、ウィンドウ右上の閉じるボタン、ディレクトリの新規作成ボタンなど、一切合切)

何かイベントハンドラみたいなコールバック関数を紐付ける必要があるのかなと思ったのですが
ぐぐって調べてみた限りでは、OPENFILENAME構造体さえ渡せば大丈夫にしか感じられなかったので
さっぱりです。。。

コードはこんな感じです。

// メインのダイアログのメッセージハンドラ
INT_PTR CALLBACK MainPanel(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
static OPENFILENAME ofn;
static wchar_t path[1024];

(略)

memset(&ofn, 0, sizeof(OPENFILENAME));
ofn.lStructSize = sizeof(OPENFILENAME);
ofn.hwndOwner = hDlg;
ofn.lpstrFile = path;
ofn.nMaxFile = 1024;
ofn.lpstrFilter = L"*.*";
ofn.Flags = OFN_PATHMUSTEXIST | OFN_EXPLORER;
ofn.lpstrTitle = L"test";
ofn.lpstrDefExt = L"*";
GetOpenFileName(&ofn);

何か足りないものがあったら指摘お願いいたします。
799デフォルトの名無しさん:2009/04/19(日) 17:29:31
日本の目覚めだな。
800デフォルトの名無しさん:2009/04/19(日) 19:21:36
>>798 その端切れソースで何をいいたいの?
#include <windows.h>
// メインのダイアログのメッセージハンドラ
int main()
{
  static OPENFILENAME ofn;
  static TCHAR path[1024];

  memset(&ofn, 0, sizeof(OPENFILENAME));
  ofn.lStructSize = sizeof(OPENFILENAME);
  ofn.hwndOwner = NULL;//hDlg;
  ofn.lpstrFile = path;
  ofn.nMaxFile = 1024;
  ofn.lpstrFilter = TEXT("*.*");
  ofn.Flags = OFN_PATHMUSTEXIST | OFN_EXPLORER;
  ofn.lpstrTitle = TEXT("test");
  ofn.lpstrDefExt = TEXT("*");
  GetOpenFileName(&ofn);
}
801デフォルトの名無しさん:2009/04/19(日) 19:25:51
珍しくまともな流れだなあ
802デフォルトの名無しさん:2009/04/19(日) 19:49:07
そもそもstaticにする必要あんのか?
803デフォルトの名無しさん:2009/04/19(日) 19:54:33
>>800
新しくWin32コンソールプロジェクトを立ち上げてそのコードをコピペしたらちゃんと動きました。
でもやっぱり当初のプロジェクトだと動かないです。
とりあえず、原因が>798で貼ったところ以外にありそうだという事だけは分かりました・・・
U-NN
804デフォルトの名無しさん:2009/04/19(日) 19:59:46
ofn.lpstrFileの内容は初期ファイル名としても使われる。
ここにゴミが入ってたり前回の内容が残ってると思わぬ動作をするが
つい出力専用だと思ってしまいクリアするのを忘れがちである。
つまりstaticにしとけば(少なくとも最初の一回は)安心なんだよ!
あとlpstrFilterとlpstrDefExtも中身ムチャクチャだけど気にすんな
805デフォルトの名無しさん:2009/04/19(日) 20:15:23
lpstrFilterはdouble-null terminatedだろ
806デフォルトの名無しさん:2009/04/19(日) 20:15:59
BSSが0クリアされると思ったら大間違いだぜ。
まあ今更元に戻らないとは思うけど。
807デフォルトの名無しさん:2009/04/19(日) 20:17:55
static変数がゼロクリアされるのはANSI Cの規格じゃなかったか?
808>798 >803:2009/04/19(日) 20:23:49
ちょっと分かってきたかも・・・
ひょっとして
> INT_PTR DialogBox(
> HINSTANCE hInstance, // モジュールのハンドル
> LPCTSTR lpTemplate, // ダイアログボックステンプレート
> HWND hWndParent, // オーナーウィンドウのハンドル
> DLGPROC lpDialogFunc // ダイアログボックスプロシージャ
> );
関数を使ってモーダルダイアログを作って、その中で GetOpenFileName() するときちんと動かない?
実際、GetOpenFileName() をモーダルダイアログのハンドラの外に追い出してみたらちゃんと動いた。
モーダルダイアログの中から更にファイル選択ダイアログなんか開いちゃだめという事なのか
809デフォルトの名無しさん:2009/04/19(日) 20:33:37
OPENFILENAME ofn = {0};
staticじゃなくてもこれでおk
810デフォルトの名無しさん:2009/04/19(日) 20:35:49
>>808
ンな訳ねーだろ
811デフォルトの名無しさん:2009/04/19(日) 20:39:15
GetFileNameFromBrowseでも使ってろよ
812デフォルトの名無しさん:2009/04/19(日) 20:51:14
>>805
>>809
>>811
駄目でしたorz

CreateDialog()を使ったモードレスダイアログからファイルを開くようにしてみても駄目でした
よっぽど変なことをしてる余寒
813デフォルトの名無しさん:2009/04/19(日) 21:15:58
pathクリアしてない
lpstrFilterは説明文とフィルタのペアでないといけない。例・TEXT("All\0*.*\0")
デフォルトの拡張子がないならlpstrDefExt=NULL
動く動かないは別にしてこの辺おかしい
814デフォルトの名無しさん:2009/04/19(日) 21:21:02
もっと全体的なソース晒せよ
呼出付近だけ晒して訊かれてもググれとしか答えようが無い
815デフォルトの名無しさん:2009/04/19(日) 21:26:51
動きました・・・
原因は結局よく分かりませんでしたが、ダイアログのリソースを作り直して

・「Style」プロパティを「ポップアップ」にしてたのを「子」に変更
・CreateDialogでモードレスダイアログとして作成(これはそのまま)
・独立したポップアップウィンドウでアプリを構成するのではなく、
 きちんとCreateWindow関数で作った親ウィンドウにリソースを貼り付ける形にする

としてみたらダイアログのハンドラからGetOpenFileName()できました
お騒がせいたしましたm(__)m
816デフォルトの名無しさん:2009/04/19(日) 21:32:49
いやそんな面倒な事しなくても普通は出来るから。
817デフォルトの名無しさん:2009/04/19(日) 22:24:03
頻繁に複数ファイル上のデータからバラバラに1バイト単位でデータ引き出す場合
ファイルポインタ使ってリードするのってまずいと思う?

メモリ足りてればいいんだけど足りない場合データをテンポラリに作ってるから
アクセス方法に困る
818デフォルトの名無しさん:2009/04/19(日) 22:29:26
メモリマッピングでいいよ
819デフォルトの名無しさん:2009/04/19(日) 22:32:53
何をもってまずいとするのか、定義を明確にせよ。
820デフォルトの名無しさん:2009/04/19(日) 22:37:38
ブルースクリーン出すKiDisplayBlueScreenってどのDLLにあるんですかい?
821デフォルトの名無しさん:2009/04/19(日) 22:42:22
>>818>>819
明確に言えないから逆に不安になる
でもなんとなく思うのは
そんな細かい1バイト単位で連続アクセスして
速度や効率負荷とかどうなのかとか、そもそもそんな使い方するのが一般的なのかとか
色々思う

メモリマッピングってファイルマッピングのこと?
822デフォルトの名無しさん:2009/04/19(日) 22:55:29
ディスクキャッシュって知ってる?
823デフォルトの名無しさん:2009/04/19(日) 23:06:55
>>822
もちろん知ってますよ
それも含めてどうなのかなと
824デフォルトの名無しさん:2009/04/19(日) 23:14:51
どうもこうも、自分が動かしたとおりの結果だろう。
それ以上でもそれ以下でもない。
それでなにか問題があったのか?
825デフォルトの名無しさん:2009/04/19(日) 23:28:57
それもそうだ色々考えすぎた
普通にマッピングか何かでやって深く考えないようにする
826397:2009/04/19(日) 23:39:44
 CreateBitmap関数で2階調のビットマップを作っています。
 試しに、1ビットずつ画像サイズ分ビットを立てているつもりなのですけれど、上手くいきません。
 上手く行くサイズの時と、上手く行かないサイズの時がある感じなのですが、何がおかしいのでしょうか?
 少々、長くなって申し訳ないですけれど、教えていただけますと嬉しいです。
 x_min , y_min → 画像の左上座標
 x_max , y_max → 画像の右下座標

 x_size = (x_max - (x_min - 1)) ;  // 画像のxサイズ
 if ( (x_size % 32) != 0 ) {  // 4バイト単位にする
  x_size /= 32 ;
  x_size *= 32 ;
  x_size += 32 ;
 }
 lp_bitmap = (LPBYTE)HeapAlloc( GetProcessHeap( ) , HEAP_ZERO_MEMORY , (y_max - (y_min - 1)) * x_size ) ; // 配列の確保
 save_lp_bitmap = lp_bitmap ;

 bit = 0 ; // 何ビット目を扱うのか
 for ( i = 0 ; i < (y_max - (y_min - 1)) ; i++ ) {  // yサイズ
  for ( j = 0 ; j < x_size ; j++ ) {  // xサイズ
   if ( j < (x_max - (x_min - 1)) )
    *lp_bitmap |= (0x01 << (7 - bit)) ;  // ビットを立てる
   bit++ ;
   if ( bit > 7 ) {
    bit = 0 ;
    lp_bitmap++ ;
   }
  }
 }
 hBitmapPiece[count] = CreateBitmap( (int)(x_max - (x_min - 1)) , (int)(y_max - (y_min - 1)) , 1 , 1 , save_lp_bitmap ) ; // ビットマップの作成
827デフォルトの名無しさん:2009/04/19(日) 23:45:32
 for ( i = 0 ; i < (y_max - (y_min - 1)) ; i++ ) {  // yサイズ
  bit = 0 ; // 何ビット目を扱うのか
  for ( j = 0 ; j < x_size ; j++ ) {  // xサイズ
828デフォルトの名無しさん:2009/04/19(日) 23:50:21
Bitmapの仕様知ってるか?
4バイトアラインで詰め物しないといけなかった気がするのだがやってる?
829828:2009/04/19(日) 23:51:26
あ、やってたか。Orz
830397:2009/04/19(日) 23:53:18
>>827
 忘れてました、ありがとうございます。
 ですが、これだけではまだ全部は上手くいかないようです。

>>828
 いえ、Bitmapは初めて扱うのであまり分かりません。
 詰め物とは何でしょうか?
 申し訳ないですが、教えていただけますとありがたいです。
831デフォルトの名無しさん:2009/04/19(日) 23:53:37
自信満々で強気に指摘したあとに
訂正するのってすげー恥ずかしいよな
832デフォルトの名無しさん:2009/04/19(日) 23:55:39
for ( i = 0 ; i < (y_max - (y_min - 1)) ; i++ ) {  // yサイズ
lp_bitmap = save_lp_bitmap + i * x_size;

これがいるんじゃね?
あとメモリ確保しすぎじゃね?
833デフォルトの名無しさん:2009/04/19(日) 23:59:18
lp_bitmap = save_lp_bitmap + i * x_size / 32;
こうかも?
x_size が画像のサイズなのか1ラインのメモリのサイズなのか
ごっちゃになってる気がする
834デフォルトの名無しさん:2009/04/20(月) 00:00:26
>>831
素直に謝るのはえらいけどね
835397:2009/04/20(月) 00:00:46
>>832
 入れてみたら間がスカスカの画像になってしまいました。
 メモリは /8 した方が良さそうですか?

>>833
 画像の上半分は表示されますが、下半分が表示されなくなりました。
 変数名が分かりづらくて申し訳ない。
836デフォルトの名無しさん:2009/04/20(月) 00:02:33
>>830
詰め物とは、ビットマップはいろんな制約から、幅の末尾をバイト単位で4バイト区切りのデータにしないといけない。
物理的に足りない部分は意味のないデータを詰めて見た目を4バイト区切りにするがその詰め物には何を書き込んでも表に出てこない。
良く見たらやってるみたいだから問題ないと思う。
っていうか俺涙目。
837デフォルトの名無しさん:2009/04/20(月) 00:04:54
lp_bitmap = save_lp_bitmap + i * x_size / 8;
これでどうだ!!!1
838397:2009/04/20(月) 00:08:16
>>836
 問題ない感じですね。
 ご説明ありがとうございました。

>>837
 一部のサイズの時に、イメージ的にこんな感じなってしまいます。
 それが直りません。
 それ以外は問題なさそうなのですが。
■■■■■■■■■■■■■■■■■■■■
□□□□□□■■■■■■■■■■■■■■
■■■■□□□□□□■■■■■■■■■■
■■■■■■■■□□□□□□■■■■■■
■■■■■■■■■■■■□□□□□□■■
839837:2009/04/20(月) 00:24:05
for ( j = 0 ; j < x_size ; j++ ) {
ここで1ライン分全部やってるからよく考えたら>>837は必要なかった
余計なこと言ってごめんなさい
840397:2009/04/20(月) 00:29:06
>>839
 ありがとうございます。
 後は>>838で書いたような変なラインが、たまに入る時があるだけのようです。
 ビットマップって難しいですね。
 どこかで1回多めに回してしまってるのでしょうか?
841デフォルトの名無しさん:2009/04/20(月) 00:29:22
>>835
縦は良いけど横幅は1ビット1ピクセルだからバイトに直すときは8で割らないといけない気がする。
842397:2009/04/20(月) 00:31:56
>>841
 ありがとうございます。
 確かにそうですね、直させて頂きました。
843デフォルトの名無しさん:2009/04/20(月) 00:47:25
#define WIDTHBYTES(i) ((i+31)/32*4)
DWORD dwWidthBytes = WIDTHBYTES(bi.biWidth * bi.biBitCount);

普通こういうのを定義して使うだろ・・・
844397:2009/04/20(月) 00:52:48
 CreateBitmapの第一引数をxsizeに変えたところ、上手く行ったみたい( ? )です。
 この引数も4バイト単位じゃないといけないみたい( ? )ですね。
 ずっと悩んでいましたので、助けていただきましてありがとうございました。

>>843
 マクロを定義した方がよかったのですね。
 ビットマップに必死で気づきませんでした、勉強してきます。
845デフォルトの名無しさん:2009/04/20(月) 00:56:07
> この引数も4バイト単位
そんな制限無いって

DIB弄りたいならMSDNにあるShowDIBとSeeDIBのサンプル見とけよ
846デフォルトの名無しさん:2009/04/20(月) 00:56:10
マクロより関数だろ。インランな
847397:2009/04/20(月) 01:00:34
>>845-846
 分かりました、見てきます。
 ありがとうございました。
848デフォルトの名無しさん:2009/04/20(月) 01:00:35
つーかCreateBitmapのモノクロビットマップはWORDアラインだぞ?
DWORDアラインはCreateDIBSectionで作ったDIBだろ。
849デフォルトの名無しさん:2009/04/20(月) 01:06:54
>>846
エロ禁止!
850デフォルトの名無しさん:2009/04/20(月) 01:13:36
>>848
Ω<な!なんだって〜。
851デフォルトの名無しさん:2009/04/20(月) 02:38:43
眠れないから作ってみた。
動作は保障しない。
    HBITMAP CreateMonoBitamp(unsigned int Width,unsigned int Height){
        int Align =2;
        int Pod =  (Width% (Align*8))== 0 ? 0:Align-((Width% (Align*8))/8);//ワードアライン
        int f=0;
        HBITMAP hbm=NULL;
        LPBYTE Mbmp = (LPBYTE)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY ,Height*((Width/8)+Pod)) ;// 配列の確保 
        
        for(int i=0;i<Height;i++){
            for(int j=0;j<Width;j++){
                Mbmp[(((Width/8)+Pod)*i)+(j/8)] |= f<<(7-(j%8));//ビット操作はここ。
                f= f? 0:1;
            }
        }

        hbm = CreateBitmap(Width,Height,1,1,Mbmp);
        //DWORD ret = GetLastError();
        HeapFree(GetProcessHeap( ),0,Mbmp);
        return hbm;//使い終わったらデリートしましょう。
    }
852デフォルトの名無しさん:2009/04/20(月) 04:36:32
ダイアログが表示されなくて困ってます
http://wisdom.sakura.ne.jp/system/winapi/win32/win84.html
ここのソースそのままコピペして
DialogBox関数の2番目の引数を自分で作ったやつ(IDD_DIALOG1)に直して
あとはresource.hをインクルードしただけです

Dialogbox関数の戻り値は-1でした
助けて下さい
853デフォルトの名無しさん:2009/04/20(月) 05:03:02
int Pod = (Width% (Align*8))== 0 ? 0:Align-((Width% (Align*8))/8);//ワードアライン

恥ずかしげもなく、よくこんな間抜けなコードを晒せるなあと感心するよ
854デフォルトの名無しさん:2009/04/20(月) 05:49:50
あまりの糞コードに噴いたじゃねーかよw 朝から笑わせんなwww


画像処理ってこういう単純なルーチンでもそいつのスキルが明確に現れるよな
855デフォルトの名無しさん:2009/04/20(月) 08:05:32
CreateDIBSectionとCreateDIBitmap使えばいいじゃん。
そもそもDDBである必要性もあるかどうか。
856デフォルトの名無しさん:2009/04/20(月) 08:43:36
>>852
朝飯食べてて、思ったんだけど、WEBページからコピーしてそのままのは動く?
あと、4つくらい有るけど、そのWEBページのどのソース?
857デフォルトの名無しさん:2009/04/20(月) 08:54:41
>>852
resource.hの中もIDD_DIALOG1になおした?
リソースをインクルードした?
858デフォルトの名無しさん:2009/04/20(月) 09:01:49
あーリソース自分で作ってインクルードもしたんかごめん
859デフォルトの名無しさん:2009/04/20(月) 10:21:58
852です

http://kissho.xii.jp/1/src/1jyou72627.zip.html
ソース丸投げです 許して下さい
いろいろ弄ってみたんですが、どうしてもダイアログが表示されません
お願いします
860デフォルトの名無しさん:2009/04/20(月) 10:32:35
まず
L"IDD_DIALOG1"

MAKEINTRESOURCE(IDD_DIALOG1)


なおすのはこれだけじゃ無いけど、まずはこれ
861デフォルトの名無しさん:2009/04/20(月) 10:37:23
あとはDlgProcで処理しないときは0を返してダイアログのVisibleをtrueにしとけば出るだろう。
862デフォルトの名無しさん:2009/04/20(月) 10:40:49
852です
出た!!!ありがとうございます!!!
863デフォルトの名無しさん:2009/04/20(月) 12:58:01
>>853-854
その関数書くのに1時間くらいかかったわけだが。
あんたらのえくすとりーむなコードさらしてくれよ。馬鹿にしたんだからできるだしょ?
あと、バグってるならバグってるって言ってくれれば後学のためになるんだが。。。
864デフォルトの名無しさん:2009/04/20(月) 13:28:09
>>863
オレだったら、こんな感じに書くかなぁ・・・

#define ALIGN_WIDTH(x,a) ((x + (a-1)) & ~(a-1))

unsigned int AlignWidth = ALIGN_WIDTH(Width,16);
unsigned int MemorySize = Height * AlignWidth / 8;
865862:2009/04/20(月) 13:44:33
>>864
結構スマートだな。
ビット操作はコードが汚くなりがちだけど、これはなかなか。
足し算で足した分で足が出た分を切ってるのかな。
866865:2009/04/20(月) 13:45:55
>>862すまん。書き間違えた。
正しくは、俺=863だ。
867デフォルトの名無しさん:2009/04/20(月) 14:22:04
いや、アライン調整の定石だからそれ・・・
868デフォルトの名無しさん:2009/04/20(月) 14:32:07
なるほど。。。
869デフォルトの名無しさん:2009/04/20(月) 15:26:44
アラインメント調整で分岐使うのは下手糞
そんな人がコードが汚くなりがちとか言う資格ないよ。

それと内側のループの
 Mbmp[(((Width/8)+Pod)*i)+(j/8)] |= f<<(7-(j%8));//ビット操作はここ。

毎回乗除算なんて無駄が多すぎる
もっとCPUに優しいコード書けるようになろうな。
870デフォルトの名無しさん:2009/04/20(月) 15:40:21
gcc 3.4.4だとループ内で乗除算を使うコードは生成されなかった
871デフォルトの名無しさん:2009/04/20(月) 15:49:14
>>869
高速化よりも書きやすさを優先してる。1スレに収めるつもりだったし。俺がやってもあんま高速にならんし。。。

まぁ、確かに描画フレーム単位で呼ぶには重いかもしれんね。
じゃあ、えくすとりーむこーどをよろしく。
872デフォルトの名無しさん:2009/04/20(月) 15:50:38
>>870
最適化すげー。
873デフォルトの名無しさん:2009/04/20(月) 15:52:03
>>871
下手なコードしか書けない癖になんでコイツ偉そうなの?
874デフォルトの名無しさん:2009/04/20(月) 15:54:23
俺が偉いなんて一言も言ってないし出てないし。へへ。
875デフォルトの名無しさん:2009/04/20(月) 15:56:45
このスレで得意げにソース晒す人って大体間抜けなコードだねw
876デフォルトの名無しさん:2009/04/20(月) 16:02:47
そんなあなたのえくすとりーむなコードを晒してくれ
877デフォルトの名無しさん:2009/04/20(月) 16:04:59
少なくとも昨日は寝れなかったから書いたのは事実だ。それ以上でも以下でもないぞ。
878デフォルトの名無しさん:2009/04/20(月) 16:06:12
別に糞コードでも構わんよ

>>700くらいの流れに比べれば本物の糞よりハナクソレベルにはマシ
879デフォルトの名無しさん:2009/04/20(月) 16:09:05
C++でこんな糞コードしか書けないならむしろC#/VB使ってろって感じ。
880デフォルトの名無しさん:2009/04/20(月) 16:11:15
俺のコードは俺が書いた>>851をみれば一目瞭然。
これをチューンしてもあんまり旨みがないと思う。
でも住人にはもっと上があるって注文だからな。ため息でるよ。

見てみたい、発想の違う斜め上。
881851:2009/04/20(月) 16:14:06
ちょっと喋りすぎたな。
引っ込むぜ。
そんじゃね!ノシ
882デフォルトの名無しさん:2009/04/20(月) 16:18:42
何言ってんだコイツ
頭おかしいんじゃねえの?
883デフォルトの名無しさん:2009/04/20(月) 16:19:36
20世紀からCコンパイラを使っていた人は最適化をあまり信用しない傾向にある
884デフォルトの名無しさん:2009/04/20(月) 16:26:55
まさに前世紀の遺物w
885デフォルトの名無しさん:2009/04/20(月) 16:40:17
最適化とかそういう話じゃないけどねぇ
富豪的プログラミングしか出来ない人はC++使わなくていいよ。
886デフォルトの名無しさん:2009/04/20(月) 16:40:45
え、本当はおまえらコード書けたのか。
887デフォルトの名無しさん:2009/04/20(月) 16:45:04
>>851みたいなのはコード書けるとは言わない
888デフォルトの名無しさん:2009/04/20(月) 17:01:06
VisualC++2008だとループの内側に除算が残る
酷い
889デフォルトの名無しさん:2009/04/20(月) 17:02:57
馬鹿にしてる奴は、ほれ、これの方が良いだろって出せないの
出せないのじゃ出来ないのと同じだと先生が言ってた
890デフォルトの名無しさん:2009/04/20(月) 17:05:21
>>889
そんな負け惜しみはいいから。
891889:2009/04/20(月) 17:13:26
>>890
俺は>>851じゃないよ。
コードにはコードでしてしたほうが良いんじゃない
それすら出来ない口先がプロのプログラマじゃ恥ずかしくない
と学生の俺でも思う
892デフォルトの名無しさん:2009/04/20(月) 17:15:38
あれで下手くそなのかよorz
俺もっと酷いぞ。
893デフォルトの名無しさん:2009/04/20(月) 17:15:41
自分では何もしない癖にコードを批判するだけしてたら
コードさらすやつがいなくなるだろう
894デフォルトの名無しさん:2009/04/20(月) 17:20:30
晒さなくていい時にわざわざ酷いコードを晒すから余計に叩かれるんだよ
895889:2009/04/20(月) 17:59:02
>>892
学校でC言語習ったが俺なんてコードすらあまりかけないよ。コードの前に
どのようなソフトの全体ストラクチャ・関数内のストラクチャにしたほうが良いのかすら分らん。

>>894
もう、コードを晒す事が求められてるから晒していいよ
896デフォルトの名無しさん:2009/04/20(月) 18:08:05
どうしてこう煽りしか出てこないんだこのスレはw
897デフォルトの名無しさん:2009/04/20(月) 18:15:17
煽りが煽りを呼ぶ
898デフォルトの名無しさん:2009/04/20(月) 18:22:41
>>895
ネタだよね?マジならこんな場所で何してんの?世の中ナメてんの?10年ぐらいROMっとく?
899デフォルトの名無しさん:2009/04/20(月) 18:22:46
WORD data[8];
for (int i=0; i<8; i++) {
  i[data] = (WORD)(0x5555 << (i & 1));
}
return CreateBitmap(8, 8, 1, 1, &data);
900デフォルトの名無しさん:2009/04/20(月) 18:23:45
>>895
コード書けない奴がなんでこのスレにいるんだよ
901デフォルトの名無しさん:2009/04/20(月) 18:39:04
>>879
MSはC++のコンパイラが一番最適化が賢いと言ってるので
糞コードしか書けない人はむしろC++の方がいいかもしれん。
902デフォルトの名無しさん:2009/04/20(月) 18:45:07
; for (int i=0; i<8; i++) {
;  i[data] = (WORD)(0x5555 << (i & 1));
mov eax, 43690 ; 0000aaaaH
mov WORD PTR _data$[esp+18], ax
mov WORD PTR _data$[esp+22], ax
mov WORD PTR _data$[esp+26], ax
mov WORD PTR _data$[esp+30], ax
...
mov ecx, 21845 ; 00005555H
mov WORD PTR _data$[esp+36], cx
mov WORD PTR _data$[esp+40], cx
mov WORD PTR _data$[esp+44], cx
mov WORD PTR _data$[esp+48], cx

うわーヘタレなコード生成だなぁ(vc2005)。2008だとマシなのかなぁ。
903889:2009/04/20(月) 18:46:07
>>900
日本語読めるの? 全く書けないとは言ってないんだけど
貴方の書けないとは言うのは、どんなレベルなの?
糞コードじゃないコードを書けることなんでしょ
じゃ、かける貴方が糞コードと言われている>>851を糞じゃないレベルに修正したの見せて
書ける貴方のコードなら、他の人から糞コードなんて言われないよね
904デフォルトの名無しさん:2009/04/20(月) 19:09:03
>>899がその答えだろ
こういうのが考えつかないなら全く書けないのと一緒
905デフォルトの名無しさん:2009/04/20(月) 19:20:08
>>903
学校で習った程度のレベルで「書ける」とは言わないんだよ。

連中は日付計算の問題で
if(month==1)return 31;
else if(month==2&&isleap(year))return 29;
else if(month==2&&!isleap(year))return 28;
else if(month==3)return 31;
...
みたいなコードを平気で書いて提出するからなw
906デフォルトの名無しさん:2009/04/20(月) 19:52:59
うっぜえぞ
プロはマ板にでも行ってろカス
907デフォルトの名無しさん:2009/04/20(月) 19:55:30
俺みたいにコーディング規約でインラインアセンブラを禁止されないように
ほどほどにしておけよ。
908デフォルトの名無しさん:2009/04/20(月) 19:59:54
インラインアセンブラなんて誰も書いてねーだろw
909デフォルトの名無しさん:2009/04/20(月) 20:01:24
>>889=>>906なのか?見苦しいぞwww
910デフォルトの名無しさん:2009/04/20(月) 20:03:06
878=896=906だバーカ
煽ってんじゃねえクソ死ね
911デフォルトの名無しさん:2009/04/20(月) 20:04:11
煽ってるのはお前だろバーカ
912デフォルトの名無しさん:2009/04/20(月) 20:04:47
913デフォルトの名無しさん:2009/04/20(月) 20:04:50
914デフォルトの名無しさん:2009/04/20(月) 20:04:53
915デフォルトの名無しさん:2009/04/20(月) 20:04:57
916デフォルトの名無しさん:2009/04/20(月) 20:05:00
917デフォルトの名無しさん:2009/04/20(月) 20:05:04
918デフォルトの名無しさん:2009/04/20(月) 20:05:08
919デフォルトの名無しさん:2009/04/20(月) 20:05:11
920デフォルトの名無しさん:2009/04/20(月) 20:08:23
止めろバカ。
921デフォルトの名無しさん:2009/04/20(月) 20:11:29
プライドをズタズタにされた>>906=>>889が発狂したみたいだなwww


煽ってんじゃない。馬鹿にしてんだよw
922デフォルトの名無しさん:2009/04/20(月) 20:13:28
あんま連投してると運営に行くのでよろしく
●持ちのようだし
923デフォルトの名無しさん:2009/04/20(月) 20:14:54
つうかケチ付けたがりが常駐してんだから無視しておけばいいんだよ。
挑発に乗って熱くなってんじゃねえ。
いつものことだろうが。
924デフォルトの名無しさん:2009/04/20(月) 20:15:19
とっとといけばいいのに
何をためらってるのか
925デフォルトの名無しさん:2009/04/20(月) 20:16:15
   ∧_∧  杉花粉撒いてやんよ
  (´・ω・)ノ>゚+。:.゚
  C□ / ゚。:.゚.:。+゚
  /  . |
  (ノ ̄∪
926デフォルトの名無しさん:2009/04/20(月) 20:16:45
お前が行け
927デフォルトの名無しさん:2009/04/20(月) 20:17:08
さあ盛り上がってまいりました!
928デフォルトの名無しさん:2009/04/20(月) 20:20:23
いつもこんなもんだよ
慣れたな
929デフォルトの名無しさん:2009/04/20(月) 20:22:34
自覚してない馬鹿が常駐してるから仕方ないよ
930デフォルトの名無しさん:2009/04/20(月) 20:24:36
文句言うならコード晒せと散々喚いてたくせに、いざ晒されたら逆ギレして荒らすとかwww
931デフォルトの名無しさん:2009/04/20(月) 20:28:31
ほっとけほっとけ。
932デフォルトの名無しさん:2009/04/20(月) 20:33:24
>>925 だけは許さない。(´;ω;`)
933デフォルトの名無しさん:2009/04/20(月) 20:34:03
ろくにコード書けない奴が専門スレに貼り付いて荒らしとかマジだったんだ
世の中って恐ろしいな
934デフォルトの名無しさん:2009/04/20(月) 20:38:39
しかも●持ちとは・・・
935デフォルトの名無しさん:2009/04/20(月) 20:40:34
i[data]
936デフォルトの名無しさん:2009/04/20(月) 20:42:03
スレがもったいないから次のレスからは全部敬語
937デフォルトの名無しさん:2009/04/20(月) 20:46:04
左様でございますか
938デフォルトの名無しさん:2009/04/20(月) 22:02:06
いつもの目覚ましスレに戻ったな
平日はこうじゃないとこのスレらしくないよな

と言うことで、目覚まし警報,age
939デフォルトの名無しさん:2009/04/20(月) 22:23:32
>>921
なんで>>906=>>889になるんだ
頭大丈夫か? お前目覚ましだからしょうがないよな。
寝ているから、>>910 が読めないのか
940デフォルトの名無しさん:2009/04/20(月) 23:39:45
おいおい、猫でもわかるで勉強した俺でも、書けない部類に入るのかよ。
どんだけ天才揃いなんだよ。
凄いスレに来てしまったぜw
941デフォルトの名無しさん:2009/04/20(月) 23:43:00
>>939=>>906=>>889
お前しつこいよ
942デフォルトの名無しさん:2009/04/20(月) 23:49:43
>>940
猫でもレベルで書ける部類に入るとマジで思ってるのか?
943デフォルトの名無しさん:2009/04/20(月) 23:54:20
boostやLokiライブラリを書けるレベル位がここの書けるレベル?
944デフォルトの名無しさん:2009/04/21(火) 00:06:13
SDK onlyでまともなソフトが作れるレベルでしょ
945デフォルトの名無しさん:2009/04/21(火) 00:10:39
じゃあ自主制作の「まともなソフト」を挙げない限り一切コメント禁止な
↓からスタート
946↑終了:2009/04/21(火) 00:11:33
947開始↓:2009/04/21(火) 00:38:16
948デフォルトの名無しさん:2009/04/21(火) 00:45:16
vipでやれクソガキ
949デフォルトの名無しさん:2009/04/21(火) 01:09:56
もうだめだこのスレ
950デフォルトの名無しさん:2009/04/21(火) 02:18:37
ちんこがすごく痒いです。何てAPI使えば解決できますか?
951デフォルトの名無しさん:2009/04/21(火) 02:31:47
DeleteObject
952デフォルトの名無しさん:2009/04/21(火) 02:49:20
ZeroMemory
953856:2009/04/21(火) 03:40:03
>>852>>859
resouce.rc → HelpMe.rc
954856:2009/04/21(火) 04:13:43
あぁ、焦った。これじゃない。
955856:2009/04/21(火) 04:30:08
いや合ってるか。
956856:2009/04/21(火) 11:41:17
>>955 笑い。名乗った人出てきなさい。

>>852>>859
DlgProcで処理しないときは0を返して
なおすのはこれだけじゃ無いけど、まずはこれ

あとは resource.h の IDD_DIALOG1 をコメントに…なんたらかんたら
957856:2009/04/21(火) 12:02:47
騙りやめてくれ
958デフォルトの名無しさん:2009/04/21(火) 16:07:06
FtpPutFileでFTPにファイルをアップロードするときに同名ファイルが上書きされて
しまいますが、これをFtpGetFileみたく上書き禁止にする方法はありますでしょうか?

実現したい事としては、複数クライアントからとあるアップした場合にそれぞれ違う
ファイル名を割り振りたいのです。FTPからあらかじめ
「ファイルリストを取得→かぶらないファイル名でアップロード」
とやってもタイミングによっては上書きしてしまいますよね。

なにかうまい方法があればご教授お願いいたします。

959デフォルトの名無しさん:2009/04/21(火) 18:24:19
ちゃんと排他制御して採番
960デフォルトの名無しさん:2009/04/21(火) 18:39:34
デバイスマネージャに表示されるような情報(どんなドライバがインストールされているか等)を
取得するには何について勉強すればよいでしょうか?
961デフォルトの名無しさん:2009/04/21(火) 20:10:16
WMI
962デフォルトの名無しさん:2009/04/21(火) 22:21:07
プロパティシートのようにダイアログにダイアログを貼り付けることは可能でしょうか?
出来れば複数貼り付けられたらなと思っています。
963デフォルトの名無しさん:2009/04/21(火) 22:31:04
WM_INITDIALOGでCreateDialogすれば幾らでも貼り付けられるだろ。
少しは頭を働かそうな。
964デフォルトの名無しさん:2009/04/21(火) 23:18:23
そんなことが可能だったのか・・
ありがとう
965デフォルトの名無しさん:2009/04/21(火) 23:24:55
>>961
ありがとうございました。なんとかがんばります。
966デフォルトの名無しさん:2009/04/22(水) 19:19:06
winlogonデスクトップに対してなんらかの手段でキーイベントを送ることはできるでしょうか?

winlogonデスクトップのハンドルを取得し、SetThreadDesktop実行後に
sendInput関数を実行しているのですが、戻り値は正常でも実際には何も入力されていないようなのです。
パスワード入力のキャレットは点滅しているので、フォーカスはあっていると思います。
967デフォルトの名無しさん:2009/04/22(水) 19:28:45
クラッカー乙
968デフォルトの名無しさん:2009/04/22(水) 20:07:49
いくら匿名掲示板とは言えこういう質問を堂々と出来る奴ってある意味尊敬するよ
969デフォルトの名無しさん:2009/04/22(水) 21:10:34
普段はフックごときの質問でウィルスとか馬鹿じゃねって言ってるが、これはないわ
970デフォルトの名無しさん:2009/04/22(水) 22:09:18
このスレだから出来るんだろうに
971デフォルトの名無しさん:2009/04/22(水) 22:46:42
ハァ?
972デフォルトの名無しさん:2009/04/22(水) 22:51:14
基地外たくさんアルスレニダ
973デフォルトの名無しさん:2009/04/22(水) 23:09:22
荒らすクズは来なくていいからさっさと質問に答えなさい。
974↑荒らすクズ↓:2009/04/22(水) 23:12:05
975デフォルトの名無しさん:2009/04/22(水) 23:17:37
また先日の荒らしが来てるのか・・・
976デフォルトの名無しさん:2009/04/22(水) 23:27:28
ここは荒らし常駐スレって思ってるんだけど.....

俺は分からんが
>>966 は Yes or Noを求めているだけで手段を聞いているわけじゃないだろ
ただ、したい事が基地丸出しなだけ。
977デフォルトの名無しさん:2009/04/22(水) 23:29:46
EnumChildWindowsってフォーカスが当たってるウィドウを最初に検出する?
978デフォルトの名無しさん:2009/04/22(水) 23:31:57
> 俺は分からんが
訳:俺は>>966だが
979デフォルトの名無しさん:2009/04/22(水) 23:33:51
zisure mada?
980デフォルトの名無しさん:2009/04/22(水) 23:36:32
>>1000
さっさと立てろ
981デフォルトの名無しさん:2009/04/22(水) 23:39:31
>>977
保証はない
982デフォルトの名無しさん:2009/04/22(水) 23:39:43
立てます
983デフォルトの名無しさん:2009/04/22(水) 23:39:54
おまえらが荒らしてばっかだからもう立てん
984デフォルトの名無しさん:2009/04/22(水) 23:42:44
985デフォルトの名無しさん:2009/04/22(水) 23:52:17
>>984
お前は使える犬だ!
986984:2009/04/22(水) 23:56:14
(U^ω^) わんわんお!
987デフォルトの名無しさん:2009/04/23(木) 00:05:33
988デフォルトの名無しさん:2009/04/23(木) 00:14:42
ウィンドウにグラフを描画していって、タスクマネージャーのグラフみたいにどんどん
左にシフトしていくようにしたいんだけどいい方法ないですか?
できるだけ、滑らかに流れるように線を引きたいんですが、メモリデバイスコンテキスト
を2用意して、ずらしてコピーして描画みたいな方法しか思いつきません
989デフォルトの名無しさん:2009/04/23(木) 00:19:34
前回描画した線を背景色で上塗りして新しい線を描画
990デフォルトの名無しさん:2009/04/23(木) 00:47:00
>>988
グラフの数値が手元にあるなら、キューイングしていって、更新のたびに書き直す。
991デフォルトの名無しさん:2009/04/23(木) 00:48:15
前フレームとの差分描画なんて今時流行らない。
Direct3Dとか見てたら馬鹿らしくなるぜ。
992デフォルトの名無しさん:2009/04/23(木) 01:10:19
ありがとうございます。差分だけをグラフに継ぎ足していくというよりは、過去の
数値を保持しておいてまた全て描画し直してていった方が効率いいんですね
その方法でいってみようと思います
993デフォルトの名無しさん:2009/04/23(木) 01:10:20
ありがとうございます。差分だけをグラフに継ぎ足していくというよりは、過去の
数値を保持しておいてまた全て描画し直してていった方が効率いいんですね
その方法でいってみようと思います
994デフォルトの名無しさん:2009/04/23(木) 01:12:52
1秒差…
995デフォルトの名無しさん:2009/04/23(木) 01:17:46
いいかどうかは何の効率かによる
996デフォルトの名無しさん:2009/04/23(木) 01:25:39
また●持ちの荒らしか?
997デフォルトの名無しさん:2009/04/23(木) 07:19:16
998デフォルトの名無しさん:2009/04/23(木) 09:18:55
>>992
今のPCの性能ならそれくらいやっても問題になりにくいだけだ。いい時代だよ、まったく。
999デフォルトの名無しさん:2009/04/23(木) 09:21:26
嫌なら石器時代にでも行ってろ
1000デフォルトの名無しさん:2009/04/23(木) 09:22:29
埋め
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。