このスレッドは天才チンパンジー「アイちゃん」が 言語訓練のために立てたものです。 アイと研究員とのやり取りに利用するスレッドなので、 関係者以外は書きこまないで下さい。 京都大学霊長類研究所
\;、 ,,-、、 {:{ 《 ≫/⌒ヽ⌒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 /=!__,ノ/.\ /:/ /::::;::イ // | ´ └=ァ /三三ニ/ _> 、 / :〃
/ // ヽ\ / // / }\. │ヘ / / // `│ ∧ / / // / / ヽ| :∧ ノl f' /// / /_厶 \| ', /イ| |//, / // //'´ ̄|lヽ \| } _ / {{ | |//// // / jハ \j │ `  ̄ ノ '|. | / __/ハ __ \ | | / /ハ | _x==ミ ィ= =x._ イ ∧ / 〃ハ | `´ `刈 ハ \ { /'/ ハ. | j f^1 / |‖ ハ \ノ ∨// 小. | ` j | j |‖ | } ヽ /'´ /ノ ,l l \ ー _一ノ ノ'´/ノ| ド、__ _ノ 花見に行く うふふ 〈_,斗-‐'´| ∨ |丶、/´ ̄ ̄ //ノ| │ `ヽ、 /,>=-、 | | {. / _ イ |│ | /⌒\ /厶 \∧ | \l r< ̄/ __|│ |-‐' / ̄`| | \ | ヽ !/}│ {_ `7 {_ |│ | / | | \ │ |_ノ | い/ /│| j'´ │ | \{ |\ | ∨ /ヘ.|/ / ! } \、 :| | V ̄ ̄ \/ / __/
キモイAA貼んな クズが
もうだめだこのスレ
わざわざダメだとか書き込まなくていいから二度と来ないでね。
刀、 , ヘ
/´ ̄`ヽ /: : : \_____/: : : : ヽ、
,. -‐┴─‐- <^ヽ、: : : : : : : : : : : : : : : : : : : : : : }
/: : : : : : : : : : : : : :`.ヽl____: : : : : : : : : : : : : : : : : : /
,. -──「`: : : : : : : : : :ヽ: : : : : : : : :\ `ヽ ̄ ̄ ̄ フ: : : : :/
/: :.,.-ァ: : : |: : : : : : : : : :\: : : : :: : : :ヽ \ /: : : :/
 ̄ ̄/: : : : ヽ: : : . . . . . . . . . . .、 \=--: : : :.i / /: : : : :/
/: : ∧: \: : : : : : : : : : ヽ: :\: : : 〃}/ /: : : : :/ 、
. /: : / . : : :! ヽ: : l\_\/: : : : :\: ヽ彡: : | /: : : : :/ |\
/: : ィ: : : : :.i: : | \!___/ ヽ:: : : : : : :\|:.:.:.:/:! ,': : : : / |: : \
/ / !: : : : :.ト‐|- ヽ \: : : : : l::::__:' :/ i: : : : :{ |: : : :.ヽ
l/ |: : :!: : .l: :| \: : : l´r. Y {: : : : :丶_______.ノ: : : : : :}
l: : :l: : :ト、| 、___,ィ ヽ: :| ゝ ノ '.: : : : : : : : : : : : : : : : : : : : : : /
|: : :ト、: |: :ヽ ___,彡 ´ ̄´ ヽl-‐' \: : : : : : : : : : : : : : : : : : イ
!: :从ヽ!ヽ.ハ=≠' , ///// ///u /  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
V ヽ| }/// r‐'⌒ヽ イ〉、
ヽ、______ー‐‐' ィ´ /:/:7rt‐---、 こ、これは
>>1 乙じゃなくて
ィ幵ノ ./:/:./:.! !: : : : :!`ヽ ポニーテールなんだから
r‐'T¨「 |: | !:.∨:/:./: :| |: : : : .l: : : :\ 変な勘違いしないでよね!
/: : .|: :| !:.!ィ¨¨ヾ、:.:/ !: : : : l: : : : : :.\
アリシアさんをキモイ言うな
キモッ
(*). .(*) * ポッ
18 :
デフォルトの名無しさん :2009/03/30(月) 00:04:12
>>8 俺の
A 熱い
P ペニス
I インプット(挿入)
してやるぜ
そのまんまインサートでいいだろ、なぜインプット
オナホールにか.... 悲しすぎる
春休みのクソガキはさっさと寝ろ
このスレ的にはinput=挿入は駄目だろ input=入力 insert=挿入だよな
英語をロクに知らない低学力の糞餓鬼に何を言っても無駄
inherit = 継承 歴史は繰り返す
インヘリット って読むの?
親ウィンドウの中に幾つか子ウィンドウがあって(MDI?親ウィンドウの範囲からは出られない) その中のフォーカスがあるウィンドウハンドルが取りたいんですが、APIは何になるのでしょうか? 親のハンドル取得→子ウィンドウハンドルを1つずつとって調べればいいと思うんですが、 よく分からなくてお願いします。
GetFocus()でとれるけど、子ウィンドウとは限らない。 WM_SETFOCUSやWM_KILLFOCUSがきたやつが親に通知して覚えておけばいいと思うけどな。
GetFocusの返値をIsChildかSHIsChildOrSelfでチェックすればいいだろ
30 :
デフォルトの名無しさん :2009/03/30(月) 12:06:42
>>25-26 継承はinheritance
inheritは「継承する」という動詞
英語教師はお引取り願います
失せろゆとり
これが所謂春厨という現象か
Windows上で、アプリケーションの起動など、なんらかのプロセスが起動した場合、 そのプロセスの実行ファイルとモジュールのファイルパスを確実に取得する方法を考えています。 今のところ、周期的にEnumProcesses()(プロセスID取得メソッド)から追ってパスの取得には成功 しましたが、一瞬で終わる実行ファイルなどの場合は、拾うことが不可能でした。 実行ファイルがEnumProcesses()の呼ばれる間に終了してしまうためだと思います。 環境はVisual Studio2008 になりネイティブで作成しているため、.Net Frameworkは使用できません。 Win32 APIなどで実行可能でしたら幸いです。 よろしくお願いしますm(_ _)m
>>34 実際にやったことないので嘘かもしれないが
グローバルフックで CreateProcess のログを取る
>>34 >プロセスが起動した場合、
>そのプロセスの実行ファイルとモジュールのファイルパスを確実に取得する方法
なんでこんなことしたいのか気になるな
余計なお世話だ。
>>34 ウインドウを作成しないプロセスまで捕捉するのは、簡単な方法では無いと思う。
.NET が使えないということから 自由にソフトウェアのインストールができないPCで使うんだろう 一瞬で終わる実行を補足したいということから CUIコマンド系の実行も調べたいんだろう スパイですな 同僚に仕掛けるのか 出向先に仕掛けるのか 客先に仕掛けるのか ろくなもんじゃねえ
CUIだとどうしたらいいんだろうなー Ntほげほげにごにょごにょしちゃえばいいのかな
41 :
34 :2009/03/30(月) 20:54:29
>>36 ありがとうございます。 調べてみます。
何か取っ掛かりが欲しかったので助かりました(^−^
>>39 純粋に仕事で必要なだけですよ。
2日ほど悩んでたんで、解決策か取っ掛かりが欲しかっただけです。
CreateProcess あたりをフックしとけばいいんでね?
gpedit.msc secpol.msc あたりでシステム監査有効にして イベントログに出力されたコマンド実行履歴を取り出して ごにょごにょしたいのですが この辺をすべてW32APIで処理できますか
>>43 イベントログは普通にWin32から読み書きできる。
ポリシーをいじるのは出来るだろうけど、知らん。
ダイアログじゃない場所にCreateWindowで貼り付けるボタンなどのフォントはどうやって変えたらいいんですか?
ownerdraw
フォント変えたいだけなら WM_SETFONT で十分じゃね?
>>41 2日悩んだ程度で質問するな
一週間悩んでからにしろ
>>49 「悩む」ってのはボーッとしてることじゃにだろうなw
どこの方言だよ
方言じゃないニダ
모르면 레스하지 마세요.번거롭다 뿐입니다.
54 :
デフォルトの名無しさん :2009/03/31(火) 13:25:33
ダイアログのコマンド・ボタン・ウインドウにツールチップを表示させてるんですが、 ウインドウが無効状態から有効状態に移るとツールチップが表示されなくなります。 何故でしょう???
ウインドウが無効状態から有効状態に移った為です
CreateMutexで2つ目の引数にTRUEを渡して名前付きミューテックスオブジェクトを作成場合、 既に名前付きミューテックスオブジェクトが存在していて所有権を得ることができなくても、 CreateMutexが有効なハンドルを返すのですが、どうすれば呼び出し元が所有権を得たかどうか判断できるのでしょうか。
GetLastErrorで確認するとかWaitForSingleObject使うとか
せめてMSDNぐらい読めよ
GetLastError使っても、以前からミューテックスが存在していたときはERROR_ALREADY_EXISTSを返すだけで、 CreateMutexの呼び出し元が所有権を取得したかどうかまで(僕では)判断することができませんでした。 WaitForSingleオブジェクトを使うにしても、最初に所有権を取得できたかどうかでReleaseMutexを呼ぶべき回数が違ってくるので、 結局呼び出し元が所有権を取得したかどうか判断できないと話にならないと思うのですが・・・orz
大きな勘違いをしてる
勘違いして何が悪い
CreateMutex直後に同じスレッドでタイムアウト0でWaitForSingleObjectを呼び出して もし所有権を持っていなければ当然開放する必要は無い
CloseHandleはどちらにせよ必要
CreateMutexで2番目をtrueにした場合は所有権を得るまで処理を返ってこないだろ
どうも
>>62 でよさそうですね。ありがとうございました。
>>63 もちろん既存であるにせよ新しく作成したにせよ、
CreateMutexが有効なハンドル戻せば、閉じなければいけないことはわかっておりました。
68 :
54 :2009/03/31(火) 15:56:55
”TTS_ALWAYSTIP”付けてるのに、なぜコマンド・ウインドウが有効になると ツールチップが表示されないのかな〜〜? 誰もわからないんだな〜〜〜 知らないのかな〜〜〜〜?
そういう書き方されると意地でも答えたくなくなるなw
70 :
54 :2009/03/31(火) 16:03:08
たわけ者め! 釣りじゃーーーwwww
実行時の状況しだいでは、
>>62 の方法も際どいことがわかってしまいましたorz
CreateMutexで所有権の取得ができなかった場合、WaitForSingleObjectの呼び出しの前に
他プロセスがミューテックスオブジェクトの所有権を解放すると、
零時間待機ではCreateMutexの呼び出しで所有権を取得したかのように錯覚してしまいますね。
頭固いって言われるだろ
柔らかいよりはマシだろ
MSDN読め
GetOverlappedResultのbWaitにTRUEを設定してもオーバーラップが終わる前に帰ってきちゃうんだけど、どういうこったい。 do bResult = GetOverlappedResult(pThis->devInfo.winUSBHandle, &pThis->ol, &dw, TRUE); while(!bResult);
書いてる最中で送ってしまった。。。。 下二行のdo while文はとりあえず今使ってるwhile待ち。
do〜whileって{}が無くてもコンパイル通るんだな 初めて知ったw
まさか if, else にも {} が必須なんて思ってないだろうな
>>79 へえーそうだったのかー知らなかったよー(棒読み)
こんなやつらが書いたプログラム見てみたい
>>82 C言語だけでも25年以上使ってますが何か
知っていてもたまにしか見かけないとどっきりするよな。 C99の新機能なんかでもよく思うんだけど。
だってさ、上のdo whileなんてそんな書き方しなけりゃ知る由も無いでしょ 大学や専門学校の授業でC言語を教わったような人なら知ってるかもしれないけど
do 文だけ違っていたらその方が驚きだろうに
>>86 その理屈だと↓のコンパイルが通らないとおかしい
int main() return printf("test");
意味合いが違うだろw
>>86 本当はdo while文を知らなかった癖にw
な、なんでわかったんだよw
#define { BEGIN #define } END ってソースを見たことがあるな・・・
リソーススクリプト(.rc)とか普通にそうなってるだろ
>>87 宣言は常にブラケット必須、命令文は中身が一文ならブラケットがなくてよい
と思ったんだが……
95 :
デフォルトの名無しさん :2009/03/31(火) 19:44:20
> 宣言は常にブラケット必須 int main(void); ↑ ブラケットないね セミコロンがついてるけど、これは空文かい?
C99だと別な用途で{}が使えるのに何言ってんだか
あれ、ここって何のスレだっけ?
>>91 それってどういうときに使うの?
逆は見たことがある
要するに紛らわしい書き方はしないに越した事は無い 特にC/C++はマクロの副作用が大きいし、一文でもブラケットを付ける癖をつけた方が余計なバグを生みにくい
>>93 宣言じゃなくて定義ね。
C99の新機能、未だに良く知らないw
//コメントが追加、くらいしかしらん
>>99 >一文でもブラケットを付ける癖をつけた方が余計なバグを生みにくい
人それぞれだが俺もそう思う
(
>>75 ´・ω・`)アノー.....GetOverlappedResult.....
結局同期使うことにしたからまあいいけどねw
俺は特に言語を習ったことがあるとかではない(ぐーぐる先生で学んだ)けど
if elseで使えるんならいけるだろとdo whileで使ってみたら使えた…、と。
>>102 それは #define begin { の場合でしょ?
repeat ... until を使ってる人は少ない
>>106 こんなのあったのか・・・今まで知らなかった
そもそもその言語を使ってる人自体少ない
いやVC2008の独自拡張でrepeat〜untilが使える
最近の学生はPascal習わんの?
C言語でさえ習わないよ
VC2008でそんな拡張あるんだ。 しかし、コードの後方互換性が著しく失われるなw
今時の学生は.NET関連ぐらいしか習わんだろ。
スーパスカラ用の最適化ヒントにでもなるならまだしも do whileで十分な所に変な拡張入れるなよw
今日は・・・
明日は・・・
do untilならずっと前から使えるだろ
>>109 おまwwwエイプリールフールだからって変なウソ付くんじゃねぇwwwwww
試しもせずに言いふらしちまったじゃねぇかwwwwwwww
>>118 今日中なら、言いふらした相手に「今日は何の日だ?」って言えば許されるんじゃねww
___ |___ミ⌒ヽペタン | ⌒)ノ ペタン ._ノ ) (( | .・∀| ( 嘘ヽ |__| | ̄ ̄ ̄| / > . | | """"""""""""""""""""
>>118 もエイプリルフールのネタかもしれんぞ。
その論調でいけば俺も
>>119 に騙されてしまった事になるのかもしれんが。
>>118 エイプリールフール以前に2ちゃんの情報を鵜呑みにするお前が悪い
2chは年中エイプリールフールだよ
ひろゆき「うそはうそであると見抜ける人でないと(掲示板を使うのは)難しい」
VCにはforeachが効いた前科があるからなw
__declspec(property)とかも随分前からあるし今に始まった事ではないだろ
#define repeat do #define until while!
130 :
デフォルトの名無しさん :2009/04/02(木) 10:16:30
age
SDKのサンプルにくさるほどあると思うが、、、 とりあえずDPI気にしないでプリントしてみそ
外部プロセスのサスペンドとレジュームを行うAPIがあれば教えてください 目的は 録画サーバの空き時間にエンコードを行い 録画が始まったら直ちにエンコードしているプロセスを一時停止させ 録画終了したらエンコードの再開させるためです よろしくお願いします
MSDN探してから質問しろボケ
SuspendThread()/ResumeThread() ってのがあるけど、 使えるかどうかわからん。
エンコーダを自作すればおk
136 :
132 :2009/04/02(木) 15:56:09
もはやAPIですらないな・・・
>>136 ってどうやって実装してるんだろう?って話になるだろ。
Windows API の話じゃあないか。
そうか?
どうでもいいよ
Windowsプログラミングを体系的かつ実践的に解説してあるサイトってありますか? 猫でものサイトより高度な内容を希望。
>>141 スレ違いな気が
言語と開発ツールは何なのさ?
>>142 VB#
VisualStudio2012Express
わかった 2012年までに作っておく
VS2012って、確かEclipseのパースペクティブとして提供されるっていう話だよね。 ・・・スマン、もう4/1じゃないんだった
Yahoo!Widgetみたいな形の自由な半透明のウィンドウを出したいんですけど、どうすればいいですか?
>>145 本当に作るんだろうな?
そう書いたからには実行してもらうよ
>>147 ポイントとなるAPIだけ提示しとく。
形の自由なウィンドウ・・・SetWindowRgn
半透明・・・SetLayeredWindowAttributes
>>149 UpdateLayeredWindowだろ半可通が知ったような口を聞くな
>>151 2000以降でしか使えないようなAPIを知ってるぐらいで自慢するなカス
はいはいw
はいはいはいww
155 :
149 :2009/04/02(木) 20:22:41
なんか変な流れになっちゃったな。 確かに調べてみたら、UpdateLayeredWindow の方がよい情報が多かった。 俺も不勉強だったよ、済まなかった。
Win98のころSetWindowRgnでアニメーションする ウインドウ作ったらちらついて使い物にならなかった WM_ERASEBKGNDとかで何とかなったのかな?
157 :
147 :2009/04/02(木) 21:32:16
助言ありがとうございます。実際の手順は 例えば、画像の透過ピクセル以外の形のウィンドウを作りたい時は ビットマップからリージョンを作ってSetWindowRgnをする。更に半透明を反映させるために UpdateLayeredWindowをする。ということでいいでしょうか?やってみます。 タイトルバーなどは、リージョン設定時にクライアント領域だけ収まるように設定すればいいんですか?
LayerdWindowの無いWin9x系でそれやるのは無謀。
非矩形ウィンドウだけならSetWindowRgnだけでも充分可能だろ 透明度を設定するならレイヤードウィンドウじゃないと無理だけどな
>>132 それってそんなに複雑なことをする必要があるかな?
単にエンコードプロセスを最低レベルの優先度で実行してればいいんじゃないのかな?
かな?
つーかエンコード用と録画用にPCを分ければいいだろ
NtSuspendProcessかませ
プロセス内の全スレッドを列挙→SuspendThreadってプログラム書いたことある。
165 :
デフォルトの名無しさん :2009/04/02(木) 23:01:58
チップセット・マザーボード・cpuの名前とかの情報を取得する関数はありますか?
レジストリから取得しろ
>>165 GetChipsetMotherBoardCPUNameToka();
169 :
デフォルトの名無しさん :2009/04/04(土) 00:38:39
Win32でファイルのアペンドオープンをしたいと思っています。 OPEN_ALWAYSでCreateFileを呼び出して、そのあとに SetFilePointer(FILE_END)を呼び出したら、文字列を追加書き 込みできるようになったのですが、なぜか文字列の表示がおか しくなります。 普通だったら、abcと表示されるはずなのに、a b cのように 文字間に空白が入ってしまうのです。 何が原因でしょうか。
Unicodeで保存してシフトJISで開くとそーなる。
172 :
169 :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 と表示されてほしいのですが、そうなってくれません。 メモ帳で中身を確認しているのですが、それが問題でしょうか。
メモ帳の「ファイルを開く」で一番下に文字コードの指定があるよ Unicodeで開いてみ
174 :
169 :2009/04/04(土) 02:01:28
ありがとうございます。無事、確認できました。 UNICODEで保存すると色々と複雑になるようなので、 ANSI(ASCII?)で保存するようにしたほうがよいので しょうか。 あと、先ほどのコードで改行が、 abc abc のようになったのですが、2行目の先頭に空白が あるのがわかりません。 改行は、\r\nでいいはずなのですが。
ANSIというかCP932 (Shift_JIS)で保存させたいなら、 Win32APIなんて使わず<stdio.h>と<tchar.h>で、_fputtsや_ftprintfなんかを使ったほうが楽だと思うよ。
177 :
169 :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 と表示されるようになりました。 むしろ、ありがたい結果なのですが、いったいなぜ...?
余計なNULLがあったから。
ANSI で abc\r\n がバイナリでどう表現されるか、チェックしてみると解る
::WriteFile( hFile, data, ::lstrlen(data)*sizeof(TCHAR), &dw, NULL);
つーかunicodeで保存するならBOM付けろよ
爆弾?
183 :
169 :2009/04/04(土) 03:08:51
ANSIとしてコードを実行し、バイナリで確認したところ、 61 62 63 0D 0A のような結果を確認しました。 UNICODEとの違いは、00があるかどうかという点ですが、 次のように考えてよいでしょうか。 その1:エディタは、連続的な00によって、UNICODEかどうかを区別する。 その2:ヌル文字を保存したら、00が変則的に存在することになり、 エディタがコード体系を理解できず、すべての文字を1つずつ表示する。
WindowsでUnicodeを表現するために用いられているWCHAR型は typedefされたunsigned short型でサイズは16ビット intel系CPUでの数値の表現方法はリトルエンディアンであるから 'a'、すなわちUnicodeでは0x0061という値をメモリに格納すると61 00となる こんな当たり前のこと何一生懸命書いてるんだバーカ という煽りが聞こえてきそうだ ああ自己嫌悪・・・
>その1:エディタは、連続的な00によって、UNICODEかどうかを区別する。 そんな単純なものじゃない。この理屈なら、ANSI (シフトJIS) の 2バイト文字が存在できないだろ。
186 :
169 :2009/04/04(土) 03:31:03
確かにそうですね。 IsTextUnicodeとかいう関数があるぐらいですから、 UNICODEの判定は難しそうです。 とりあえず、a b c 問題の原因は、ヌル文字の保存が原因なようなので、 今後は、lstrlen(data)*sizeof(TCHAR)のようにしたいと思います。 それにしてもこのスレは良スレですね。 夜分遅く色々とありがとうございました。
この程度のことならWindows APIじゃなくfopenでも十分のような コンパイラがVC++なら 1.プロジェクトを作ってマルチバイト文字セットにする 2.fopen(hoge, "at")で開いて書き込む で十分 Unicode?何それ、おいしいの?
189 :
デフォルトの名無しさん :2009/04/04(土) 13:42:29
WCHAR型はtypedefされたwchar_t型だろ unsigned short型とかいつの時代の話だよ
PdhGetFormattedCounterValue使ったらPDH_CALC_NEGATIVE_DENOMINATORが返ってきた。 どういうことでしょうか?
193 :
デフォルトの名無しさん :2009/04/04(土) 17:56:12
TextOutWではUTF-8を描画できませんか?
そもそも TextOutW なんつう API は存在しない
APIはあるだろ
無いよバーカ
198 :
デフォルトの名無しさん :2009/04/04(土) 18:16:43
TextOutAではUTF-8を描画できませんか?
UTF-8はSJISかUTF-16に変換して 〜Aか〜Wに渡すしかねーんじゃね?
綺麗に描画出来ますよ。あまりの美しさに感動
>>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を使えばいいだけ。
バイト構造を変換するだけなんだから大した労力でもない。
>>195 APIとして存在しなくても、gdi32.dllにそういう名称でエントリポイントが存在するのだから、
そうギスギスした返事を返さなくてもいいでしょ。
>>203 エントリポイントという言葉の使い方が間違ってるよ
やっぱり馬鹿なんだね
バーカバーカ バーカバーカ バーカバーカ
もうだめだこのスレ
もうダメだこのスレ Windows内部はUTF-16って誰か知ってんのか? それ知ってるだけでやるべきことは導かれ、 Windowsにおける文字列操作の不毛な議論は要らんのだが。
もうぜんぶUNICODE_STRING型を使うでOKだろ…この議論はさ
WindowsでUnicode文字セットと言われてるのは UTF-16っつか、正確にはUCS-2
9x系も内部Unicodeだっけ?NT系のみは勘違い?
9x系は部分的にUnicodeだろ
9xはCOM関係のインタフェースだけUnicodeで その他はマルチバイトじゃないの? 別途配布されてるMicrosoft Layer for Unicode という ランタイムをインストールすると無理やり 〜W のunicode APIが使えるようになるとか (試したことはないけど)
>>210 Windows 2000のあたりからUTF-16対応と言われる気がする。
その辺りから本格的にサロゲートペアに対応するようになったのかなと思おう。
9x系はCOMとファイルシステムと一部のマルチメディアAPIはUnicodeで、それ以外はANSI NT系はNT4までがUCS-2で、2000以降では一部のAPIをUniscribeに転送して表面上はUTF-16
何気にlstrlenWとか使えるんだよなw
>>214 それこそ件のTextOutWとか、Win9xでも正常にUCS-2/UFT-16を扱えるAPIがいくつか存在する。
OS内のネイティブは9xがMBCS、NT系がUCS-2/UTF-16なんで、NT系でTextOutAとか使うと変換が入ることになるが
ビッグエンディアンの符号化スキームをUTF-16BE、 リトルエンディアンの符号化スキームをUTF-16LEとして区別することもある。 MIMEなどの手段で符号化スキームにUTF-16BEやUTF-16LEを指定している場合には BOMを付与することは許容されない(ZERO WIDTH NON-BREAKING SPACEとして扱う)。 Windows上の文書における「Unicodeテキスト」は特に明記のない場合、 リトルエンディアンのUTF-16符号化スキームのことを指す。 更に厳密にいえばUTF-16LEか
>>219 だからファイルシステム関連は9xでもUnicodeだって
APIを経由するときに変換が入る
エンディアンはプロセッサによって違うわけだから Windows内部の文字コードは厳密にUTF-16。
Windows内部はUTF-16(笑) なんか頭悪そう
馬鹿ばっか
`i;;;;;;;;;::''' .....::.;;;;;;;;;;;;;;;;;;;;;;;;i ''''''/ U .......::::::::;;;;;;;;;;;;;;;l、 / ,__ 、___::::::::::;:::;;;;;;;;;;;;;;i ⊥ _ f ‐._´`i ̄ ̄ ̄ ::::::: r´ `i,;;;;;;,l r´. l_,.,i t, "~’j :: ヽ, .l;;;;;;i やっべ・・・スイッチ押しても飛ばねぇ 'i、 |'~ノ ,ヾ-‐´ l ィ´, ノ;;;;l、 `-+イ、,・ .)、 U `;- ´ ;;;;;;;j . `::ノ ,=--、ヽ /';、 `i 、==‐フ ,/ ヽ--―--、 `i、"´ ノ .ィ´ _.ィ´ ,,>ー-、_
で、結局WindowsAPIにUnicode渡すとき、どうすれバインダー BOM付けていいの? ビッグエンディアンなCPUだったらUTF-16BEに変換していいの?
>>227 BOMは付けず、WCHARの配列を渡す。それでいいじゃないか。
ダメだよ。
help me!
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;
で?
でで?
クリックなどを受け流して、ウィンドウは見えるんだけど存在していないように みせかけたいんですが何かいい関数ありますか? 例えばウィンドウ上をクリックされても反応せずそのまま一つ奥にあるソフト にクリックがいくみたいな感じ 一つ後ろにあるソフトのハンドル調べて来たメッセージ送るしかない?
WS_EX_TRANSPARENT
おおありがとう。これだよこれ、こんなのまであったのか
>>233-234 知らないn・・・・
いや、どうすれば正しい値が取得できるのか教えてほしいんです。
少なくともうちの環境じゃ上記コードで問題ないように見えるぜ (vista sp1 + admin + uac無効)
240 :
デフォルトの名無しさん :2009/04/05(日) 14:05:05
印刷プレビューはMFCのCViewにあるやつを使うか プリンタのデバイスコンテキストから情報を集めて自力で作るかだな
質問させてください デスクトップや他のソフトのウィンドウ上に線や四角形を描画したいのですが方法がわかりません 自分で作成したウィンドウであれば描画はできるようになりました 使用する関数などヒントを教えていただけませんか
デスクトップ全体に透明なウィンドウを作る
>>239 あら?今普通にコンソールでやったら、うまく行きました・・・。
もしかして、SetSystemTimeAdjustmentとかやってるとダメとかですか?
なんかこれやったら100になるんですが・・・
すまん質問させてくれ 今サービスと連携するアプリ作っていて サービス内でファイルマッピング作成、それを用いてやり取りを当初考えていたんだが System権限で実行される為か、連携アプリ側ではサービス側で作成したマップが開けない 連携に何か良い方法とかないかな?
パイプカット
Dynamic Data Exchange
連携アプリをSystem権限に昇格
サービスから他のアプリ起動した時ってそのアプリの画面表示されたっけか?
それは対話を有効にする、のチェックいれてりゃできるけど 今回のとは違う話じゃ?
□ デスクトップとの対話をサービスに許可 でした
>>246 サービス側できっちりアクセス権を指定しとけばOK。
254 :
246 :2009/04/05(日) 16:23:28
みんなありがとっ
パイプはマッピングどうしてもうまく行かない時に試して見る
DDEは分からないから、最終手段にしてみる
>>253 サービス側って事はCreateServiceでサービスを登録する時に
サービスのアクセス権を指定するって事かな?
>>246 セッションを跨いでいるからだめという原因なら、
マッピングオブジェクトの名前にGlobal\を前置するというのはやった?
>>254 違う。CreateFileMapping でファイルマッピングオブジェクトを作るときに、
SECURITY_ATTRIBUTES を指定する。
245ですが、うちのPCは時間解像度がデフォで156250nsecでした。 1ミリ秒で時間を使いたいからSetSystemTimeAdjustmentで10000nsecに設定してるんですけど、 これとCPU使用率の計測をうまく両立させることってできないんですかね?
?
260 :
246 :2009/04/05(日) 21:06:44
>>255 試してみた
でも、やっぱりERROR_ACCESS_DENIEDが発生する
>>256 単純にSECURITY_ATTRIBUTESのアドレスを渡すだけではないよね?
CreateFileMappingに渡す時のSECURITY_ATTRIBUTESがどのような状態にすればいいのか分からない
無知で申し訳ない
クライアント側でCreateして(もちろんGlobal\\で)サービス側でOpen だったら特に障害なく動作するけどさすがにこのレベルで作り直すのはめんどくさいよな、たぶん
>>260 回答でてる気もするが・・・
やり方忘れたけど、サービス系の場合次のような処理が必要だった希ガス。間違いだったらスマソ
1. 対話を有効
2. 特定ユーザーのデスクトップ領域取得
3. 実行
それは窓メッセージをやり取りする(UIを表示させたり)する場合じゃなかったっけ?
セッション0の分離でも関係してるんじゃねーの?
265 :
246 :2009/04/05(日) 22:24:21
長々付き合って貰って申し訳ない
>>261 サービスは常に起動状態で、後は連携アプリでいつでも操作っていうのを想定してたから
かなり作り直すことになるかも・・・
System権限でDLLを開かれると、そのDLLがロックされって事は無いと思うんで
サービスと連携の間にDLLを置いて対応出来ないかをちょっと試して見ます
質問です VisualStudio 2008 Express Edition で、 自分のウィンドウに「AtlAxWin」の様なIEコンポーネントを張りつけたソフトを作りたいのですが、 ATLを使わずにこれを実現するにはどうしたらよろしいでしょうか? 宜しくお願いします。
DDKのATLを参考にして勉強するのが早い気がする
メニューを選択する処理をコードで書くにはどうすればよいでしょうか?
270 :
266 :2009/04/05(日) 22:49:36
>>267 >>268 即レス感謝します
そのサイトは大変参考になりそうですね
DDKはまだ、自分には未開の地ですが、少し勉強してみたい思います
ありがとうございました
何をしたいのかによる。とりあえず WM_MENUSELECT
>>271 ありがとうございます。
自分が勉強不足なのですが、マウスでメニューを選択した時に出るメッセージを
コード上で発生できないか調べていました。
>>272 もし、選択というのがクリックのことであれば、
単にSendMessageでWM_COMMANDを送りつけるだけで十分ということにならないかな?
わざわざATLを使わずCOM関連弄りたいなんて馬鹿かドMだろ
>>273 それでできました!ありがとうございます。
>>275 Spy++ですか?VC++9 Expressには入っていないみたいです。
Standardでも買え
どうでもいいけどSpyってPlatformSDKに入ってなかったか? 昔の話だっけ
SpyとSpy++は別物。 ……Spyってどんなツールだったっけ?
SDKのSpy++はUISpyってのに置き換えられたっていう話が出てきた これの事かな〜
SDKのSpy++なんてねーよ
>>260 InitializeSecurityDescriptor() しただけの空の SECURITY_DESCRIPTOR を指定して、
SECURITY_ATTRIBUTES のサイズ指定も忘れずに。
これだと、何でも OK の指定だから、その辺は気をつけてね。
286 :
デフォルトの名無しさん :2009/04/06(月) 10:18:21
>>243 HWND hWnd = GetDesktopWindow();
HDC hdc = GetWindowDC(hWnd);
...
ReleaseDC(hWnd, hdc);
287 :
246 :2009/04/06(月) 12:03:18
>>283 有難うございます。是非とも試して見ます。
質問ばかりなのに答えて頂き本当に有難うございました。
Advanced Windows5版を買って来て読んでるのだが・・・ 難解な言い回しでなかなか理解できません。 Win32APIでソフト作りたいんですけど、 何から手を付けたら良いでしょうか。
Hello Windows
>>288 Advanced Windwsは入門者向けじゃないぞ
>>6 の入門サイトをテキトーに回るか
書籍なら、プログラミングWindowsで良いんじゃない?
291はつまり、 2000年から今までの間にWin32APIの仕様は変わってるんだから使い物になるわけねーだろ と言いたいってことでおk?
>>292 違います。Windowsの根本は何も変わってません。
10年経った今も十分通用する基本的解説だと思ってます。
じゃあ更新されてなくてもいいじゃない
Windowsの根本は何も変わってないってねぇ 冗談のつもりなのか?
Yes Joke
296はつまり、 2000年から今までの間にWin32APIの仕様は変わってるんだから使い物になるわけねーだろ と言いたいってことでおk?
根本は変わっているかも知れんが 使用できるAPIはほとんど残ってる が正解 実際XP対応ソフトなら98以降が動作環境対象だ
>>299 いやいやいや、
言っていることは100%同意するが、現実は要2000以降のアプリが多いぞ。
結構みんなW版使っているんじゃないかな?
外部プログラムの目的のEditがフォーカス(アクティブ?)されているかどうかって GetForcusやフォアグランドウィンドウで分かるんですかね? うまくいかなくて、つかってるAPIが間違ってるかどうか教えてください。
フォーカスってのはキーボードフォーカスのこと キーボードからの入力を受け取るのは基本的に1つだからね。 で、GetFocusでいけるとおもうけど、どううまくいかないの?
プロセス(スレッド)超えでの取得だから AttatchThreadInput が必要なんじゃね?
>>300 本家がサポートを打ち切ったOSまでサポートしたくないだろ
>>302 ,303
レス、ありがとうございます。
GetForcusでハンドルは取れるんですが、
ハンドルをSpyのものと見比べると、どうもただ単にウィンドウが
取得されているみたいです。
AttatchThreadInputは知らないんで調べてみます。
ウインドウを透過させるAPIとかも2000以降だった希ガス。
>>300 XP以降だと一部のコントロール(Editなど)がUnicode版しか対応していない
要するにXP以降にまともに対応するならUnicodeアプリにするしか無いってこと
もちろん9x/NT系を判別して内部でA/W切り替えれば両対応できるがそんなソフトは殆ど無い
>>305 >単にウィンドウが取得されているみたいです。
それが GetFocus の仕様なんだけど?
個別のコントロールのハンドルがほすぃ とか?
GetForcusじゃなくてGetFocusを使えばいいと思うよ。
GetForcusでググるとほとんどVBだな さすがブビ厨は馬鹿ばっか
最近だとVista/XPのみ対応、というソフトも出てきてるね。 ただNT系ならかなり以前のソフトでもXPで動くのは確か。 鬼畜王などなど
鬼畜王はPC-98 486DX4 Win95でそこそこ動くレヴェル
> Vista/XPのみ対応 てか、ほとんどがそれ。 2000を使ってると2000とXPの壁をよく感じるよ。
>>313 486SX 33MHzで動かなかった思い出がw
フリーソフトなんか、どうせサポートしなくていいんだから、 だめもとで、unicows.libリンクしておけばいいのに、と思う。
フリーソフトが無保証なのはわかるが、だからといってサポートしなくていいなんて考えでソフト公開する人は氏ねと思う
フリーソフト公開してる人でサポートしないって言ってる人いるんだ?
しなくていいよそんな貧乏人の相手なんて
貧乏人だからフリーソフト使ってるんだろが
スレ違い
つーか板違い
>>321 都合が悪くなるとスレ違いと言って逃げる人ですね、わかります
違います
図星ですね、わかります
326 :
321 :2009/04/06(月) 23:17:33
違います。更に言うなら324は自分ではありません。
327 :
デフォルトの名無しさん :2009/04/06(月) 23:17:39
プロセスツリーの終了はどうやればいいのでしょうか? CreateToolhelp32Snapshot()などとTerminateProcess()を組み合わせれば いけるのは分かるのですが、その方法では終了させている間に対象の プロセスが停止して新しいプロセスが同じIDで起動して停止させてしまう 可能性はないのでしょうか?
マルチタスクOSの根本を理解してない馬鹿発見
329 :
デフォルトの名無しさん :2009/04/06(月) 23:22:40
ググレカス
>>327 そんなに心配ならプロセスハンドルを保持し続けていれば?
ハンドルを持っている、つまりカーネル内部にプロセスのオブジェクトが残っている限り、
そのIDは使い回されないはずだから。
>>327 ジョブオブジェクトを使ったらいいんじゃない?
>>331 ありがとうございます。
ただ、CreateToolhelp32Snapshot()がスナップショットなので、そこから目的の
プロセスのハンドルを探している間に(ハンドルをつかむ前に)PIDが使いまわされないかを
心配しています。
さすがにそんな短時間ではあり得ないのでしょうか?
>>332 ジョブオブジェクトは知らなかったので調べてみました。
TerminateJobObject()を使って全てのジョブオブジェクトを終了させることが
出来そうですね。
ただ、ジョブオブジェクトを作る際にプロセスのハンドルを指定しなければならず、
PIDからハンドルを取得するまでの間にPIDが使いまわされる可能性は無いのでしょうか?
最初から自分でプロセスを作成してプロセスのハンドルを保持していれば問題
なさそうですが、そうでなければPIDがかぶる可能性が完全に無いということは
ありえないのでしょうか?
> PIDからハンドルを取得するまでの間にPIDが使いまわされる可能性 大いにある そもそも自分以外のプロセスをTerminateするなんて行儀が悪いんだよ WM_CLOSE等の適当なメッセージを投げて終了してもらうように作っとけ
>>333 プロセスの起動と終了を繰り返して、何回目で重複するか試してみればいいじゃん。
DWORD pid; GetWindowThreadProcessId( hwnd, &pid ); HANDLE handle = OpenProcess( pid, ... ); こういうソースが期待通りに動作する保証なんてどこにも無いってこと。 GetWindowThreadProcessIdからOpenProcessの間に、対象プロセスが終了して、違うプロセスが起動して同じPIDが使われる可能性があるからな。
>>335 CreateProcess()で作成したところからハンドルを保持して管理するとか、メッセージ
投げて終了させるのが正しいのは分かるのですが、今回はそういうことが出来ない
事情があるのです。
>>337 正しく動作する保証が無いことは分かりましたが、タスクマネージャにある
「プロセスツリーの終了」はどうやって実現しているのでしょうか?
どういう事情だよ マルウェアでも作ってるのか?
可能性がある、ってのと、現実的にありえる、ってのはだいぶ違うんだけどな。
>>339 子プロセスの作成のソースは別のところが管理していて手が出せず、子プロセスの
終了部分だけを実装する必要があるのです。
終了部分ってねぇ・・・ そもそもTerminateProcessは暴走したプロセスを止めるような目的で使う物だろが
BOT作ってんの?不正行為に荷担したくないなぁ。
ある体験版ソフトを使っている。 そのソフトは試用中には定期的に別プロセスが起動して広告メッセージを出す。 広告メッセージが出る以外は製品版と何ら違いは無い。 つまりこれを自動的に潰すプログラムを作れば製品版を購入する必要は無くなる。 こういう事じゃねーの?
>>342 もちろん分かっていますが、プロセスが残って入れば強制終了させる必要があるのです。
>>343 違います。
もしそうであれば、ほぼ起きなさそうな確率の問題なんて心配しません。
どうも下衆の勘繰りが好きだなお前ら
だから強制終了しなくて済むように知恵を絞れよ TerminateProcessが必然として話を進めてる時点でおかしいんだよ
もういいよ。次の方、どうぞー
はいー えーっと、Win32APIはどこから手付けたらいいですか?
>>350 あのう、、一昨日くらいからなんですけどー・・・・
同じ関数を2回続けて呼ぶ糞を発見しました。
1回目はサイズ取得で2回目に所望の結果取得みたいなんですがー。
糞仕様だからですか?
>>351 サイズ取得用に別関数を用意するのが面倒だったんだろ。
バッファにNULLを渡せば必要なサイズを返すっていうWin32APIの実装は合理的だと思うが
>>351 そうです
そしてあなたの日本語も糞です
コード量が少なくて済むだろ。 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; }
USBで繋がれた機器とデータのやり取りをしたいんですが、どの辺りを勉強したら いいんでしょうか? 例えばUSBカメラからの信号を受けるとか、何か接続されてる機器に信号を送るとか
ドライバが提供するAPIを使うんじゃね?
360 :
301 :2009/04/07(火) 08:59:33
AttatchThreadInputを使って一応うまくいきました。 ありがとうございました。 新たに教えてほしいんですが、一応と書いたのは一旦他のプログラムに フォーカスが移って目的の外部プログラムにフォーカスが戻ってきたときに Editではなく親ウィンドウのハンドルが返ってくるときがあって、Editに テキストを送れない時があります。 親ウィンドウかどうかは判別できるので親ウィンドウならEditのハンドルを 取得すればいいだけなんですが、なんかスマートな方法ってないですかね? 長文になってしまいましたが、よろしくお願いします。
>>358 普通はドライバ経由で、その接続してる機器ごとの処理となる
USB-シリアルポートなら、普通のシリアルポートと同じ処理、
スキャナ等なら、ドライバ提供のものかtwainを使う
>>359 >>361 ということはその機器のドライバが提供してるAPIがわからない場合はデバイスドライバの
勉強からするべきなんしょうか
今度デバイスドライバ開発の本買ってみることにします。ありがとう
>>357 同じAPIを2度続けてコールする話でしょ?
そのコードは的を射てない気がする。
>>363 は呼ぶ方のことを考えているだけで
呼ばれる側のコード量のことは考えてないだけだろう。
>>366 なるほど・・・。
しかし、呼ばれる側が怠慢したいだけに思う。
基本は呼ぶ方のこと考えて設計するでしょう。
Windowsの最初の頃は呼び出し規約をPASCALにするほど節約したかったんだよ。
呼ぶ方が楽したかったらVBでも使っとけ
>>367 わざわざ別のAPIにすれば下手すりゃ呼ばれる側のコード量が2倍近くになる
CPUの命令キャッシュにも載りにくくなるし、そんな理由でシステムファイルが肥大化して
OSのインストールディスクがDVD2枚組とかなったら迷惑
同じAPIを2度呼びたくないってアホ丸出しの発想だな 別関数になってると「えーと、必要なサイズを取得するAPIは・・・」とMSDN引く手間が増える そして「〜というAPIの必要サイズを取得するAPIを教えてください」「ググレカス」というレスで埋まる事になる
話のコシをおるが、いまどきのVBはAPI呼ぶ時に楽になっているのか? 昔(1.0〜2.0の時代)はひとつのAPIを一度呼ぶだけのために”Public Declare Function うんたらかんたら"しなきゃならんかったので、 それがイヤになってVB→C→C++に乗り換えていったんだが。 (なもんで、俺のVBの時計は2.0で止まっている。)
宣言の構文が変わってるだけで今も一緒じゃね? #include <windows.h> みたいなのはVB/C#には無いでしょ
>>371 GetWindowText/GetWindowTextLengthとか分かれているのもあるから統一感がないんだよな。
>>372-373 今も同じ。
変わったことがあるとすれば、そういうのをまとめているウェブサイトができて
ググってコピペできるようになったことくらい。
GetWindowTextの場合プロセスを跨ぐ事もあるから別関数にした方が効率が良かったんじゃねーの?
協調型マルチタスクだったWin3.1までは今の仕様で問題なかったが サイズ取得以降、バッファを確保して実データを取得するまでの間にサイズが変動する可能性がある現在 2回呼び出しを要求するAPI仕様は阿呆としかいいようがない
378 :
372 :2009/04/07(火) 18:03:25
>>377 要するにAPI側でバッファ確保して返せってことか
アホはお前だよ
データ長取得→メモリ確保→データ取得 ってやってる間にデータ長が変わるって可能性も無いわけじゃないんだよなぁ
大多数のAPIは変動しないだろが GetWindowsDirectoryとか、1回目と2回目の呼出の間にWindowsディレクトリが移動していたら驚愕
ファイルを読み出そうと思ったら消されてた。
レジストリを逐次読んでいったら途中で書き換えられた。
環境変数からパスを取得していたら変更された。
>>377 は阿呆としか言いようがない。
>>382 ファイルは必要ならロックしろ
レジストリや環境変数は変更された場合問題があるなら使うな
当然だろ
>>382 レジストリの読み書きは一度で行え
環境変数は変更されたらWM_SETTINGCHANGEが来るから適切に処理しろ
当然だろ
Enum*は全部アウトかよ
>>384 >レジストリの読み書きは一度で行え
馬鹿はこういう無理を平気で言う
対策をとるのなら、サイズを指定するAPIも、 正常にとれるまでサイズの取得、メモリの確保、データの取得を繰り返せばいいだけ。 他は対策云々を出すのに、この件に関しては出さないって、どれだけ頭が悪いんだろう?
レジストリの読み書きは RegCreateKeyEx で開いたら一度になる、ってことじゃないのか?
>>387 RegQueryMultipleValues
つーかレジストリが途中で書き換えられて困る状況なんて無いに等しいだろ
少なくとも HKCU\software\(会社名)\(ソフト名) が途中で書き換えられる事は無い
∵自分以外のソフトがここにデータを書く事は無い
関連付けのような、他のソフトが弄れるレジストリでも然るべき手順で読み書きすれば問題無い
マイドキュメントは使うかも
実際に必要になったら話題にしてくれよ お前ら普段そんな気使ってるの?
RegQueryMultipleValues >ldwTotsize >lpValueBuf パラメータが指すバッファのサイズを、 >バイト単位で示す値へのポインタを指定します。関数が成功すると、 >バッファにコピーされたバイト数が ldwTotsize パラメータに入ります。 >バッファが小さすぎたために関数が失敗した場合は、必要なサイズ(バイト数)が入ります。
>>390 複数起動を許すAPを作った場合は考える必要がありそうな気もする。
そもそも複数のレジストリが同時に読みたいんじゃなくて、
レジストリからパス情報なりを取得した後に、
データを読み書きしようとしたら、
その間にパスを変更されるだろという話だ。
結局そんなことを言っていたら切りがない。
それが
>>377 に対する結論。
397 :
デフォルトの名無しさん :2009/04/07(火) 22:36:31
プログラム上でのビットマップ作成についての質問です。 ・カラーのビットマップの作成 ・2階調のビットマップの作成 Win32APIを使ってジグソーパズルを作っています。 1枚の元絵を読み込んで、そこからピース(台形)ごとにビットマップと マスク(2階調)を作成して、PlgBlt関数で描画をさせようと考えました。 ・CreateBitmap ・CreateDIBitmap ・CreateDIBSection ビットマップの作成については上に書いた3つの関数を見つけたのです が、主に引数の値をどうすればいいのかが、いまいち分かりません。 LoadImage等で読み込んだ元絵は、GetObject等でピクセルデータの取得 をすることはできましたので、カラー用のビットマップと、2階調のマスク が作れれば解決すると思うのですが、どういった風に記述すれば作成できま すでしょうか? ちょっと説明が分かりづらくて申し訳ないのですが、教えて頂けますと嬉 しいです。
>>394 自分のアプリなら読み書きする時にMutexでロックするぐらいの対策はしておくべきだろ
>>395 マイドキュメントが変更されると困るとかそういう話か?
パスが変更されて困るならApplicationDataに置いとけばいいだろ
要するにアプリ側で対策すれば済むレベルなんだよ
何がいまいち分からないのかが分からない
>>398 >自分のアプリ
勝手な前提で話を進めるなよ。
そんなことを言ったらサイズが変更される可能性のあるAPIだって、
自アプリ外で変更される可能性のないものを前提にすればいいだけになるだろ。
自分の主張を押し通すだけのために、都合のいいように条件を決めるって、
どれだけ自分勝手なんだよ?
多重起動を許すアプリなら設定の読み書きをシリアライズ化するのは常識だろ
Win32API使いって頭も凝り固まった人多いのか。 Win32APIの常識は常識って発想。まじウケるんだけど。
つーか複数タスクから同一の資源に対して非同期にアクセスするとどうなるかなんて考えればすぐ分かると思うけどねぇ
405 :
397 :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 ) ;
目的の箇所のビットを1にすればいい
407 :
397 :2009/04/07(火) 23:43:59
>>406 ビットでしたか、すみません、すっかり頭から抜けていました。
通りでオーバーフローしていたのですね。
やってみます、ありがとうございました。
409 :
397 :2009/04/08(水) 00:09:41
>>408 CreateDIBSectionでカラービットマップ、CreateBitmapでマスクを作って、試してみようと思います。
また分からないことができてしまった際には、教えてくれると嬉しいです。
助かりました、ありがとうございました。
>>403 は?何言ってんの?
このスレじゃ一番有識者だけど?断言してもいいぜ?勝負するか?
一人でやってろゴミ
一人でやってろクズ
あのさ、ここはWin32APIを使うためのスレであって、Win32APIの設計について 話すようなスレじゃないだろ。 どんなクソな設計だろうと、一貫性があろうとなかろうと、最終的には それを使わなきゃならないんだから、黙って実装に従って使えってこった。
質問です。 付箋アプリのようにデスクトップにウィンドウを貼り付けるにはどうしたらいいでしょうか? MSDNにはWPFのサンプルはあったのですが、Win32でやるにはどうしたらいいでしょうか。
CreateWindow()
>>413 黙って従ってたらWin32API並の糞インタフェースを公開する
馬鹿開発者が増えるんだぞ。
具体的に問題になってから言ってくれよ 空が落ちてくる心配みたいなものだろ
空が落ちてきてからじゃ遅いぞw
落ちて来ない(馬鹿が増えたところで何の問題もない)んだからどうでもいいだろ
ここはオレが押さえてるからみんなは先に行ってくれ!
馬鹿が増えたからコンピュータが出来たし、その逆も言えるのでは?
概念論と化して来てるなwww この辺にしておかないか?いやホントに。
“Win32APIは糞” 訳:Win32APIは難しくてボクには理解できません><
ドトネト厨(特にブビ厨)でAPIを使えない奴の台詞 「Win32APIは設計がクソだ」
ファイルシステムを経由せずに直接ディスク上のデータを取得したいのですが そういった用途で使えるWin32APIってどれでしょうか?OSはWindows XPです。 たとえばMBRとかFATとかパーテーションテーブルとかゴミ箱から削除したファイルの残骸などです。
CreateFileじゃだめなん?
Windows 指定のポートのUSBの電源を止める/つける方法って何かありませんか?
>>427 大丈夫でしたorz
ですよね。すみません助かりました。難しく考えすぎてたorz
ありがとうございます!!
>>420 あんた仕事したことある?coderレベルの仕事しかしてないんじゃない?
たまに、いかにもWin32APIって仕様のインタフェース見かけるよ。
理に適ってれば許すが、あらゆる観点でWin32API厨的な作り。
無駄に引数13個とかな。
こんなところで仕事の話とかしなくていいよ
そうだ 仕事したくないから2chやってる身にもなれ
それはAPIが原因なのかあ? 単に設計がバカなだけだと思うけど。
>>430 >たまに、いかにもWin32APIって仕様のインタフェース見かけるよ。
作った奴に言ってろ。
「言ったよ」ってレスはいらねえぞ。
解決したならそれで良いじゃん。現時点で何か問題なの?って話。
なんだこれ自演かwwwwwwwww?
Win32APIって仕様のインターフェースが糞だからって インターフェースを統一した Win32APIラッパ- をわざわざ用意しなおすの? って話に・・・
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 ワロタ
WinAPIが糞だと思ったらMSの開発チームにでも入って理想的なインターフェイスのAPI開発して欲しい それができないなら実現不可能だから黙ってて
もう、リリースされたもんに文句言うなよ
鬼のようにフィードバック連打したら改善してくれるんじゃねえかw?
WinAPIが糞だと思っていた時期が俺にもありました。 今となっては別の感慨を抱いている。 1) あれの代わりを俺が設計できるか? できないだろう。 2) APIを定めたマイクロソフトの開発チームは俺より優秀か? はるかに優秀だろう。 3) ホントは慣れてきただろ? そうそう、もう慣れてきた。苦痛も無い。
それはキモイわ
すごい人口密度ワロタ
さすが、プログラム板一勢いがあるスレ
>>436 でもそれが存在していて、美しく一貫性があって、しかもきわめて
薄いラッパーで性能低下がほぼ0だったら、俺は使う。
無いものねだりは死ね
なんだ小学生がバレて悔しかった
>>410 が一人でファビョっただけか
学校始まって憂鬱なんだろうけどこんなスレで憂さ晴らしするなよ
さあ、Cairoの実装を進める作業に戻るんだ
>>430 > 無駄に引数13個とか
Win32APIのインタフェースとどう関係あるんだ
まさかAPIの中に引数が多い関数があるからとか言う理由じゃないよな
糞だ糞だを連呼してるだけで、具体的にどこが糞なのか、どうすべきなのかは指摘できない VB厨がAPI呼出の煩雑さに発狂してるだけでしょうな
WinAPIで困るのは関数が常にフルスペックなことかな。 良く引数で迷う。
フルスペック?
あぁ、言い方悪かった。 念のため用意されてるような引数が多すぎる。
省略したいものも含めて列挙若しくは構造体の設定が必要 ってこと? <フルスペック 開発環境の力借りて言語的に補助するのならワカランではないけど 同じ機能のAPIで省略可能な組み合わせ分をシンボル変えて列挙用意するのは微妙だな。
455 :
デフォルトの名無しさん :2009/04/08(水) 19:14:41
言葉遣いは変だが言いたいことはわかる 例えば滅多に NULL 以外を指定しない引数あるいはメンバなどが多すぎる
MFCかWTLでも使えばいいだろ
457 :
451 :2009/04/08(水) 19:18:05
しばしば、予約済み (Reserved)なメンバや引数があるけど、無くしてほしい。 内部で使うんだったら、一般公開用のAPIとは別にすればいいし、 将来使うつもりなら、そのときにExでも付けて新APIを増やせばいいのにと思う。
>>455 他だと引数ごとに関数が用意されているのか?
そんな訳はないよな、それこそ馬鹿げている
書く必要がないだけで大元は引数が用意されているんじゃないのか
ReservedやUnusedってのは以前は使われていたけど後に廃止されて残ってる物がほとんどだよ
>>459 その論で CreateFont を場合分けして作ったいったら爆発しそうだw
CreateFont_Name (名前だけで) とか CreateFont_Height (高さだけで) .... 気が狂いそう
>>460 逆か。そういえばCallNext(ryとかCreateWindowのやつがそうだね。
>>461 CreateFontをよく分かってない馬鹿発言だな
464 :
461 :2009/04/08(水) 19:49:28
>>463 どういうこと?
NULLや0を省略的意味で引数に渡せる関数で
NULLや0を記述する必要の無い API が欲しい って言ってるのが元なんだけど・・・
CoInitializeのReservedは16ビット時代にはアロケータを指定できた IMAGEINFOのUnusedは当初はhbmImageのプレーンとビット数だった 探せば幾らでもあるだろ
466 :
デフォルトの名無しさん :2009/04/08(水) 19:50:21
>>459 > 引数ごとに関数
SetHoge(handle, hage); とかそうだろ
大元ってのがよくわからんが
GetObject と CreateHogeIndirect みたいなパターンで
「普通の設定」をパスできるならそうしたいだろ
誰か言ってたけど C++ が欲しくなる
だったらMFCかWTLでも使えって言ってるだろが
>>466 CreateHogeIndirect ⇔ CreateHoge と SetHoge_Indirectの中の1つ
こういうことか
Create 直後から Set 呼び出し完結するまでのスキマの扱いがやらしいね
>>466 勘違いか?
引数の数ごとに関数が在るのかどうかだぞ
そうじゃないなら、速度を重視した場合余計な処理が増える事になる
デフォルトをパスしたくても最終的にはデフォルトであるということを伝えなければならない
470 :
デフォルトの名無しさん :2009/04/08(水) 20:14:08
クラック防止?
呼び出し云々で文句言うやつはラッパーで十分
所詮その程度の指摘しか出来ない奴がAPIは糞とか喚いてた訳か
475 :
デフォルトの名無しさん :2009/04/08(水) 20:37:20
>>469 引数の数と関数の数の一致にこだわる理由がよくわからない
誰もそうは言っていないと思うぞ
渡すべき情報が多いときは構造体にまとめるなり
デフォルト値を用意するなりは、変わったことではない
誰か言っていたが歴史的事情で残った醜悪さだと俺も思うが
その醜悪さを残すまいとする工夫に欠けるところが皆無だと思うか?
> デフォルトをパスしたくても最終的にはデフォルトであるということを伝えなければならない
いや、ある時点まで黙っていることによって確定するデフォルトが欲しいこともある
うるさいよ
>>475 引数のだけの問題ならそれこそインライン展開のラッパーで十分
処理を増やしていいなら何とでもなる
それがAPIは糞とどう関連するんだ
#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; }
error C2731: 'wWinMain' : 関数はオーバーロードできません。 どういうこと?
int APIENTRY _tWinMain( HINSTANCE hInstance , HINSTANCE hPrevInstance , LPTSTR lpCmdLine , int nCmdShow )
WTLにしろMFCにしろ WNDPROC にユーザー追加領域部分がうまくないくて マップやチャンウで濁してる部分が嫌な感じだな
482 :
デフォルトの名無しさん :2009/04/08(水) 21:10:39
>>477 例えば CreateWindow に Indirect がないのは、処理を減らすためだったと思うか?
# 俺は糞という表現は使っていないが、変だと思うところを無理に納得しようとはしていない
もともとオブジェクト関係しかないと思うが CreateDialogIndirectはちょっと違うし あるとすればMessageBoxIndirectぐらいか
484 :
デフォルトの名無しさん :2009/04/08(水) 21:47:55
そうかなー Indirect を用意するとしたらモードレスの方だと思うけど
Win16時代を知ってる人ならばとある歴史的理由でCreateWindowIndirectが無いって知ってる筈だがね どうせWin32のそれもXP以降ぐらいしか使ったこと無いようなゆとりだろ
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
実装がどうなってるかは知らんが スタック絡みじゃないか
>>484 CreateDialogIndirectはモードレスなんだが
>>482 が言ってる処理とは少し異なる
結局、CreateWindowやCreateFileなどの引数が多くてゴネてただけなのか 久々に低次元な論争を見た
構造体を指定する方が面倒だろが 引数だと語呂合わせで覚えてしまえばいいが、 構造体のメンバの名前を一字一句間違えず暗記するのは大変だし入力するにも手間がかかる 先に言っとくがIntelliSenseが当然な時代しか知らないゆとりはレスしなくていいよ
492 :
デフォルトの名無しさん :2009/04/08(水) 22:31:39
>>485 Win16なんてどうでもいい。もう16ビットマシンないでしょ?
あと10年も経ったらWin32なんてどうでもいいよ。Win64が主流になるんだから。
おまえは1950年代のコンピュータ使ったことないだろ?
どうせWin16以降しか使ったことないようなゆとりだろ。
493 :
デフォルトの名無しさん :2009/04/08(水) 22:33:16
>>490 覚えるって発想が馬鹿なんだって。意味わかる?
構造体指定より引数がいいって・・・馬鹿かよ。サンデープログラマーだろ?
トランジスタ発明直後にPCは存在しない
ゆとりと言われて「1950年代のコンピュータ使ったことないだろ?」てw 小学生の喧嘩かよwww
MSが16ビットから32ビットへの転換時に手抜きしたのが悪いんだけどな。 今時16ビットウィンドウズなんて学ぶどころか知る価値すら無いよ。
Windows3.1とWindowsNT3.1ってそんなに時間差ないよね。
>>497 小学生は大人しくXP/Vistaを使っててね
小学生はパソコンに触れなくていいです
Win16からWin32への転換期にまだ生まれてなかった人が 「学ぶどころか知る価値すら無い」とか言っちゃってるよwww
>>490 HOGE hoge = {a, b, c};
って書こうとしたが、これANSI Cでも初期化子に変数とか
コンパイル時定数でない値を指定できないんだっけ。
HOGE* hoge = (HOGE*) "\x03\x45\x03\x45\x03\x45";
>>502 馬鹿か。そんな書き方するなら引数指定の現状でいいだろ。
もういいから他でやってよくだらねえ 続けるならここから3レス以内に結論出せ ウゼエ
3レスは無理だが3スレ以内なら何とか頑張ってみるよ
〜結論〜 ↓
え?俺? そんなこと言われても・・・ちょっと困るわ。
おう、任せとけ
〜結論〜 Build81まで続きます。 以上
レバーコントロールなんですが、 "hwndChild"で子ウインドウをセットできるけど1つしかセットできないですよね エクスプローラーとか、 コンボボックス(アドレス) ツールバー(移動) 見たいに一行に複数のウインドウが入ってるタイプがあるからどうなってるのかなって、 ウインドウの上にコンボボックスとツールバーをセットしてそのウインドウをセットしてるとかなんですかね?? これが正解的な方法を教えてほしいです。。。
質問文を書く前にSpy++で確認すれば解決するだろが
1、ユーザー:ウィンドウサイズを変更 2、WM_SIZE:表示内容のサイズの変更 3、WM_PAINT:再描画 ユーザーがウィンドウサイズを変えることによって、 表示内容のサイズもウィンドウに合わせたいのですが、 メッセージが来る順番は、上の1〜3のようになるのでしょうか。 また、一瞬ですが、ウィンドウサイズが変更された後に 表示内容サイズの変更されていないものが 表示されているように見えるのですが、 ウィンドウがない位置に表示してしまって大丈夫なのでしょうか。 (BeginPaintでの描画なら、そこを自動的に調節してくれている?)
他のソフトのサイズを変更して元に戻すといったことをするとして、 変更が目に付かないようにするAPIって無いですか? ウィンドウを小さい腐れたときに隠れてる部分にクリックメッセージを 送りたいので。
517 :
513 :2009/04/09(木) 09:17:09
む〜、よくわからんです、 これってレバーコントロールの上にツールバーやコンボボックスをただ並べてるだけなんでしょうか・・・
Spy++で確認しても分からんって・・・馬鹿?
Spy++の使い方がわからん奴なんているんだな
>>513 適当な親を作ってそれにコンボボックスとツールバーを作ってやればいい
>>514 を試したのか?Spy++が無いにしろ親子関係を知る類似のソフトはあるだろ
>>515 WM_SIZEの最後にInvalidateRectでもいれとけばいい
>ウィンドウがない位置に表示してしまって大丈夫なのでしょうか。
描画されるのはウィンドウではなくデバイスコンテキストなので問題ない
>>516 目的のウィンドウがサイズ外のメッセージを処理する設計になっている
かつクリック位置がサイズに影響することなく不変であるなら
ウィンドウのサイズ外でもメッセージを送ることは可能
レジストリをアトミック操作する汎用的な手段が無い点などの問題が指摘されていたはずなのに いつのまにか引数のようなどうでもいい話になっているんだ
523 :
515 :2009/04/09(木) 09:41:31
あるプロセスがレジストリを操作している間、他のプロセスがレジストリにアクセスできないなんて大問題だろ そんなの無くて当然
レジストリに文字列を書き込んでるときに、一瞬の後から別のプロセスが読み取りの要求をしたときに、 書き込みが終わってることは保障されてるの?
保証されてるに決まってるだろ だからINIじゃなくてレジストリを使うべきなんだよ
アトミック操作が必要になる例って
>>395 しか挙げてないんだけど
マイドキュメントの位置を調べてファイルを作成するとする
SHGetSpecialFolderPathを読んだ後に、CreateFileするまでの間にマイドキュメントが移動されたとしよう
CreateFileが失敗するだろ?これを例外で始末して成功するまでやり直せばいいだけじゃん
どうしてこう頭が固くて応用が利かないんだろう
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をロクに見てない馬鹿が騒いでただけか・・・
RegOpenKeyTransacted RegDeleteKeyTransacted
>>527 マイドキュメントの位置を1_秒おきに移動するソフトがあるとその実装では困るだろ。
>>530 別に1_秒おきに移動しなくてもいい
その一回と
>>527 の一回が重なった場合の話じゃないのか?
もしかして釣られた?
>>532 1回しか移動しないと、
>>527 は成功するまでやり直すって言ってるからそのうち成功するよ
SHLockSpecialFolderLocationを事前に呼び出しておけばいいよ
すまん勘違いしてた やり直しが成功するまでにまた移動したら困るということね
Windowsアプリって全部のウインドウやコントロールにはハンドルがあるものだと 思ってたんですけど。 ブラウザの中のボタンとかFirefoxが表示するダイアログとかって、中のコントロール に一切ハンドルとかが無いのは、どういう仕組みなんですか? イベントドリブンで動いてないんでしょうか?
ボタンの絵を描いてボタンのように振舞わせてるだけ。 エディトやコンボボックスも同じ。
>>536 IEもFirefoxもWindowsコントロール使わずに全部自前で描画、イベント処理してる
それはそっちの方が実行速度が早いとか安全性が高いというからなの? それとも別の理由が?
別の理由がある。
>>539 IE,Firefox と、標準のコントロールだけで作られた画面見比べてみりゃわかる
負荷は高くなってると思うが、今のCPUパワーなら微々たるもの
メッセージ・ループを回してる子ウインドウが、オーナー・ウインドウを閉じても 死にきってないようで、プロセスがタスク・マネージャに残ります? オーナー・ウインドウから WM_CLOSE を送る方法では駄目なのでしょうか? それとも、なにか見落としてる手続きがあるのでしょうか? お教えください。
>>542 別スレッドで子ウインドウ用のメッセージ・ループを回してるって事か?
PostQuitMessage(0); が無いとか・・・じゃないよね
destroyWindow(
ExitProcess
/ / . | // ひ ぐ ち か っ た ー | . / . \ | // ゛""''‐、 、 ────\── ─ .─|─./-/──── ─ -- _,,....,,_ `ヽ、 \ .', `.' |/. / 、.' .' ` . .' 、゚ / , '" ,; ,..-‐'''' ̄`ヽ゛""''‐、, \ ;.:. / ,|_ / -'. '`. .・ ' / ´、 , . ,' ,;: ,. ', ヽ \//|. / \;.'.'‐ `:.. ' ;:/ ' / ;: ;; y' "  ̄`'ヽ. i /\|^|/.'o^ |!;.' ;.'`:.'´;./': ; : ,' ;;: ノ ノ人リ)ゝ ;;. | /. .,::.'\/|_/;:;.': ・ / ! ,;;;: ,,;;J J ^ω^し:;;'' .ノ . / ・..' /\i|" ;.'. '. .'/: .' i '';;: ;: ;;,'':;i`y'_i,;;;:::'' / .、´. '` / \; : ;.'´./ ,`: ; ´ ' , ,く,/,_,_r ;ゝ , / . /. | ,'\/ ヽ、 !,ン'´ '-´ / / / . | /\ . ` ' ` , .' . / . / |/ \ / ./ / /| . \ ─━━‐ ./ / | \ . / / . | \
誤爆
他のソフトのリストビューに項目(行)を追加させて、こちらのソフトの情報も無理矢理 一緒に表示させるようにしたいんですが、どうすればできますか? 自分のところにLVITEM構造体作って設定を入れ、ListView_InsertItemしても無理で アドレスのせいかと思い、共有メモリを作ってそこにLVITEM入れ、そのアドレスをListView_InsertItem でSendMessageや、VirtualAllocExで相手のプロセスに領域確保、WriteProcessMemoryでLVITEM構造体の 書き込み、そしてListView_InsertItemでそのアドレスをSendMessageなどしたんですが相手のソフトが 「動作を停止しました」になってしまう。 やっぱり相手のソフトに無理矢理DLLを読み込ませる→そのDLLの中で項目追加 しかないんでしょうか?できるだけDLL使いたくないんですが
>>549 VirtualAllocExの方法でいけると思うが
リストビューのあるプロセスを自分で作って試してみたらどうだ、debugも出来るし
相手側プロセスがリストビューと別に項目を管理していたら駄目だろう lParamが独自データへのポインタだったり
NULLチェックしてあるなら取りあえずは成功するでしょ まあ、相手次第だが
WM_SIZEでサイズの変更が標準化だったか 調べる方法がありましたら教えてください。 最小化、最大化はあるんですが。
元のサイズに戻すならSIZE_RESTOREDだが標準化なんて知らない
555 :
553 :2009/04/09(木) 15:01:40
>>554 ありがとうございます。
SIZE_RESTOREDは通常サイズ同士のWM_SIZEの場合も同じなんですよね。
GetWindowLongのWS_MINIMIZEを予め調べておく方法も使えば
やれそうな気がするので、これでやってみます。
>>550-552 ありがとう落ち着いてやったらVirtualAllocExで確保LVITEMの書き込みでリスト
項目追加できました。でもリストの名前が空白でちゃんと入らない
(構造体LVITEM).pszTextに入れる文字列用にVirtualAllocExで領域を確保して、そこに
文字を入れる。でLVITEM.pszTextにそのアドレスを入れるで合ってますよね?
とりあえずリストビューだけのウィンドウを作ってそれで試してますがそれでも
上手くいきません。もちろんそれに追加のコード書いたらちゃんと追加されるけど
なんでだああああ
処理はこんな感じです。 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を書き込んだアドレス);
多分LVITEMも相手プロセスに無いと駄目なんだろう
LVITEMも //LVITEMの書き込み のところで書き込んでます。 こんな感じで RemoteItemMemory = VirtualAllocEx(hProcess, NULL, sizeof(&item), MEM_COMMIT, PAGE_READWRITE); WriteProcessMemory(hProcess, RemoteItemMemory,(PVOID)&item, sizeof(&item), NULL);
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 に定義されている場合は、どのようにすれば良いのでしょうか? 何か、ヒントでも良いので、知っている方がいらっしゃったらよろしくお願いします。
そのDLLはちゃんとロードできてて、AboutInDLLのポインタ取れてるの?
newで一つにまとめたり適当に色々変えてたら何故かできたあああああ ふぅこんなのに8時間もかけてしまったぜ
563 :
560 :2009/04/09(木) 18:38:32
>>561 DLL は起動時動的リンクでロードされているみたいです。
すいません。
About を DLL にそのまま移植して呼び出したところ、何の問題もなく表示されました。
さきほど試したのは、 クラス定義のもので、オブジェクト経由だったので、他の原因があるようです。
スレを荒らしてしまい申し訳ありませんでした。
また、 561 さんを始め、考えてくださった方にはお礼とお詫びを申し上げます。
すいませんでした。
あつかましいですが、また何かありましたらよろしくお願いします。
ShellExecuteExで開いた実行ファイルのウィンドウハンドルを取得する方法ありませんか? EnumWindowsProcでHWND列挙、(HINSTANCE)GetWindowLong、GetModuleFileName でファイル名を取得して、ShellExecuteExで使ったファイル名と比較して同じファイル名 のHWNDを取得。と考えたんだけどShellExecuteExで起動させたからかそのファイル だけEnumWindowsProcでこないのは何ででしょ?
システムメニューをキャプションバー以外のところ、というかNC_HITTESTメッセージを処理する以外の方法で 出したいんですけど、どうすればいいですか?今はGetSystemMenuとTrackPopupMenuで出してるんですが これだと、同じ項目を2回選べなくなったりと不都合が出るんです。
ShellExecuteEx() を使ってるなら、起動したモジュールのプロセスハンドルを取得できる。 あとは、EnumWindowsProc()で取得したウィンドウハンドルに対してGetWindowThreadProcessId()で プロセスIDを取得し、取得したプロセスIDからプロセスハンドルを取得して、先のプロセスハンドルと比較すればよろし。 同じ実行ファイルが複数起動していた場合、ファイル名の比較では要を成さない。
プロセスIDからプロセスハンドルってOpenProcessでいいの? 全然一致しないんだけど
>>567 その質問単独ならYesと答えるところだが、
>>566 が間違っているな。
IDは一意だと決まっているが、ハンドルはそうとは限らないから同一判定には使えない。
(いい例が複製を作るDuplicateHandle。複製先と複製元は同じ実体を指すが、ハンドルの値は異なる)
ShellExecuteExで得たプロセスハンドルからGetProcessIdでプロセスIDを取得して、
それとGetWindowThreadProcessIdから得たプロセスIDを取得するようにすればいい。
569 :
513 :2009/04/09(木) 22:36:41
>>559 RemoteItemMemory = VirtualAllocEx(hProcess, NULL, sizeof(item), MEM_COMMIT, PAGE_READWRITE);
WriteProcessMemory(hProcess, RemoteItemMemory,(PVOID)&item, sizeof(item), NULL);
サイズが間違ってる
572 :
542 :2009/04/10(金) 06:40:20
「メッセージ・ループを回してる子ウインドウが、オーナー・ウインドウを閉じても 死にきってないようで、プロセスがタスク・マネージャに残ります?」 シングルスレッドのアプリなんですが、メッセージループを持つ子ウインドウを 開いたまま、オーナーウインドウを終了させるとオーナーのウインドウクラスの PostQuitMessage() ほか UnregisterClass() が実行されません。 なにか基本的な勘違いしてるようなのでヒントお願いします。 オーナー、子ともメッセージループは以下のとおり、 while(GetMessage(&msg,NULL,0,0) > 0) { TranslateMessage(&msg); DispatchMessage(&msg); } GetMessage()の第2引数を変えると返って変になるし、よくわかりませんが…、、、
>>572 > シングルスレッドのアプリなんですが、メッセージループを持つ子ウインドウを
他のプロセスのウィンドウをオーナーにしてるのか?
違うなら子ウィンドウにメッセージループはいらない
メッセージ・ループ オーナー・ウインドウ タスク・マネージャ 「猫でもを見て勉強しました」感が物凄いんだがw
>>572 メッセージループを持つ子ウインドウってどう言う事だ
さほど意味も無く書いたのか、そうじゃないなら具体的に書いてくれ
PostQuitMessageはどこで実行してる
普通はプライマリウィンドウのWM_DESTROYあたりで実行してやる
576 :
572 :2009/04/10(金) 08:46:32
ご指摘のとおり、猫その他WEBのみに頼ってW32APIプログラミングしてます。 1) TreeViewの子ウインドウを開きたいが、ダイアログ・テンプレートでは使えない機能が あり、CreateWindowExを使ってTreeViewを作成している。 2) 独立したTVプロシージャ−を作りたいが、CreateWindowEx()ではTVのプロシージャ−を指定できないので TVウインドウの親ウインドウを作り(クラス名を登録しメッセージループを作成)、 TV親ウインドウのオーナーとして、アプリケーションのメインウインドウを設定している。 MSDNをがんばって読むと、『クラスの登録 = プロセスの生成』みたいなことが かいてあったので、出直してきますが、勘違いのご指摘おながいします。
>>576 メインウインドウ
└TV親ウインドウ
└TreeView
メインウインドウのメッセージループがあるのにTV親ウインドウにもメッセージループを作成したってことか?
シングルスレッドでどうやったんだ
>>576 通常コントロールは子ウインドウとして使う
プロシージャを指定できるサブクラス化というものがある
クラスの登録 ≠ プロセスの生成
>>577 おそらくこうじゃないか
┌メインウインドウ
└TV親ウインドウ
└TreeView
どう実装したかは知らないがメッセージループは一つでいい
>>576 2) 独立したTVプロシージャ−を作りたいが、CreateWindowEx()ではTVのプロシージャ−を指定できないので
そのためのサブクラス化でつよ
hTreeView = CreateWindowEx(...);
WndProcOld = GetWindowLong(hTreeView, GWL_WNDPROC);
SetWindowLong(hTreeView, GWL_WNDPROC, (LONG)WndProcTreeView);
> 1) TreeViewの子ウインドウを開きたいが、ダイアログ・テンプレートでは使えない機能が > あり、CreateWindowExを使ってTreeViewを作成している。 これの意味が解らんのだが、ダイアログエディタで設定できないスタイルフラグがあるって事か? WM_INITDIALOGでSetWindowLong(GWL_STYLE)かTreeView_SetExtendedStyleを叩けばいいだろ
581 :
デフォルトの名無しさん :2009/04/10(金) 12:29:19
>>572 DefWIndowProcかそれに相当する自前処理へ行かないルートがあるんじゃねーの?
皆様、ありがとうござます。 TreeView_SetExtendedStyleを叩けばいい… そんなものもあるのですね。驚愕です。 『ここは、APIの宝石箱や〜』 タコ麻呂
>>582 >ここは、APIの宝石箱や〜
米国MSDNサイトで言ってくれよ。。。
あっちは原石の鉱脈だから…
その鉱脈で取れたのが事知都原石だったということですね。
コマンドプロンプト上のIMEの有効・無効を取得する方法ってありませんか? ImmGetOpenStatusなどのImm系のAPIがコマンドプロンプトでは使えないようです。 keybd_eventでVK_KANJIを押してやることで、IMEのON/OFFすることはできましたが、 現在の状態を取得する方法を探しています。
単体でも複数でも子ウィンドウがある状態で 親はそのままアクティブで、作業している子ウィンドウもアクティブにすることはできますか 簡単に言うとphotoshopと同じ感じに
コンボボックスのドロップダウンリストみたいに 親ウィンドウからはみ出すコントロールって作れる?
はみだすウィンドウ部分を WS_POPUP にすればよろし。
ドロップダウンしたときに土台のウィンドウ作ってあげればできるんじゃない?
>>589 最初にそれを考えたんだけど
WS_CHILDと併用するとコントロール作れなくてさ
>>590 やっぱそれしかないよね
ありがと
すみません587なんですが WS_CHILDで作成して内部の動作的には問題ないのですが 子のタイトルバーが非みたいになって困っているというものです 色々なapiで試しても操作対象の子ウィンドウのタイトルバーがオンにならないです どなたかわかる方お願いしますー
無理やりアクティブ色で描画してるのではないかとも思ったけど、答えがあるのなら俺も知りたい。
windowsx.hにあるメッセージクラッカ用の関数の例 (Cls_OnPaintなど)の Cls_ って何の略でしょうか? 自分はClassだと勝手に思っていますが。
>>592 WM_NCACTIVATEでFALSEを返す
>>595 それでぐぐって色々試しましたがやり方がわかりませんでした…
最初からならないで、一旦他アプリから切り替えるとオンになったり
子ウィンドウ全部がアクティブになりっぱなしになったり
どういうタイミングでやるのか何か参考になるものとかないでしょうか
その程度の知識なら諦めろ
>>596 結局全ての子ウィンドウを親ウィンドウのアクティブ状態と同じにしたいということですか?
それなら、例えば BOOL flgActive というフラグを作って、親ウィンドウのACTIVATEで
親が非アクティブになったかどうかを判定して、flgActive をアクティブならTRUE、非アクティブなら
FALSEにして、子ウィンドウのWM_NCACTIVATE の wParamをいつでもどこでも全部flgActivateに
差し替えて、デフォルトのプロシージャに渡してやれば、強制的にそういう動作になります。
そういう実装の是非はともかく、最も簡単にご希望の動作が実現できます。
子ウィンドウのタイトルバーを自前で描けばいいんじゃね? photoshopとか自前だろ
WS_EX_TOOLWINDOW
タイトルバーが小さくなるだけじゃないんだな。 一寸見直したぜ。
602 :
デフォルトの名無しさん :2009/04/13(月) 19:35:06
任意のスレッドで構造化例外起こしたいだけど、このAPIで一発みたいないい方法ある? 今はSuspendThread後、SetThreadContextでEIPを0にしてるという。。。
RaiseException?
604 :
602 :2009/04/13(月) 20:20:47
RaiseExceptionは呼び出し元スレッドに対してにしか起こせないような希ガス thread idとか指定して別プロセスで走ってるスレッドにも例外起こしたいです
64bitアプリケーションが持っているウィンドウのウィンドウハンドルは 64bitなのでしょうか? 32bitなのでしょうか? ハンドル型が64bitになっているのは当然ですが、実際にウィンドウハンドルとして 0x100000000以上の値があり得るのかということです。 32bitアプリケーションと64bitアプリケーションでメッセージのやりとりが できなくなっている様子もありませんし、互換性のためにウィンドウハンドルの 値について、なんらかの保証があるのかと思ったものですから。
頭大丈夫か?
>>606 心配ありがとう
頭には...けがありませんが....
プロセス間で継承できるものや、プロセス間通信に使えるものは、 たしか32ビットのままだったはず。 少なくとも64ビット版Spy++でみた限りでは、 ウィンドウハンドルは全て32ビット値になっている。
610 :
605 :2009/04/14(火) 00:29:13
>>607 ありがとうございます。MSのドキュメントがあれば一安心です。
32bitプロセスからのEnumWindowsで64bitプロセスのウィンドウが取得でき、
メッセージも送れることから、多分下位32bitしか使っていないんだろうと思ってはいたんです。
> 32ビットと64ビットとの間でウィンドウハンドルをやり取りするときに > OSがハンドルの値を勝手に変換するという実装だって、 > 理屈の上では可能なはずだから、 そうなると、64ビットのプロセスが自分で取得したウィンドウハンドルを32ビット プロセスに渡せないことにならないか?
WM_APP+αを投げっこするやり方はまだまだ通用するのか。
ひとつのウィンドウにハンドル2つ付けたっていいじゃない。
意味ねえだろw
>>611 あーごめん。たしかにそう、好き勝手に受け渡ししていたらだめだね。
ウィンドウハンドルって32ビットでも実質下位16ビットしか使ってないだろ。
>>616 どこの32bitもどきWindowsの話だよ
少なくとも2000/XPでは実質下位16ビットしか見てないよ。試してみれば分かる。
うわ、マジだ。 上位16bitを切り捨てたウィンドウハンドルにSetWindowTextしても普通に動作した。 何の値なんだこれ。
64bit版Vistaだと、16進6桁のHWNDがたまに見られるな。5桁は普通。
下位16ビット=HWNDとして有効な値 上位16ビット=再利用カウンタ 例えば、0x1234というHWNDが最初に使用されるときは0x11234で、次に使用されると0x21234、・・・ DestroyWindowされてHWNDが回収されるまでは下位16ビットは衝突しない。 つまり生存可能なHWNDの上限は32767個ってこと。
おもしろい。「そもそもHWNDとは何なのか?」を解説したドキュメントなり書籍を読んでみたいな。 Webだと、「アドレスです」とか書いてあることがあるけど、複数プロセスで共有できる ハンドルがただのポインタなわけがないだろうと。
ただのポインタには興味ありません
レイモンドチェンのblogでも読んでこい
9xの場合は共有メモリ上にある64KBのテーブル=sizeof(void*)*16384 のインデックスがHWNDだったが NTもそんな感じだろ
そう考えたら ハンドル=インデックス っぽいね。
627 :
taguti :2009/04/14(火) 16:13:36
6個のreal型変数x1、y1、x2、y2、x3、y3を定義しそれぞれに実数つを読み込んで、xy平面上の3点 (x1、y1)(x2、y2)(x3、y3)を頂点に持つ三角形の面積を計算して、その値を表示するプログラムを作成してください。 ・公式:底辺x高さ÷2を使って計算してください。 お願いします!!
マルチポスト↑
お願いします!!
>>595 >>598 規制で書き込めませんでした
NCACTIVATEだけにこだわったり色々勘違いしてたようです
TOOLWINDOWしないで考えていたんですが
結局598さんとほぼ同じ感じでやりましたありがとうございました
A()という関数でGetProcessHeapを使用して取得した プロセスのヒープハンドルを使ってメモリ確保を行い、 そのアドレスを戻り値として返した後に B()という関数のパラメータにそのアドレスを渡して またGetProcessHeapを使って取得したプロセスの ヒープハンドルでHeapFreeを行うのは可能でしょうか? 多分プロセスのヒープハンドルなので可能だと思うのですが こういうやり方(都度GetProcessHeap)ってあまりやらない方が いいのですかね?皆さんは普段どうやってますか? ※一番聞きたかったのはここです 宜しくお願いします。
そりゃ、ハンドルリークしないようきちんと管理すればできるだろ。 プログラムの設計の話ならスレ違いだから他所でやってね。
>>631 毎回戻り血チェックとかめんどくさいから
俺は構造体に突っ込んで渡してるよ
>>633 いちいち構造体で管理するのこそ面倒すぎじゃね?
プロセスのヒープハンドルなんだからエラーになる事はまずないだろJK
636 :
631 :2009/04/14(火) 21:49:31
ありがとうございます 自分なりに考えてやってみます
>>637 ハンドルもクローズ関数のある物だから使い終わったら閉じないといけないものがある。
EA(Enterprise Architect? UMLの) でのデフォルト設定で右下に表示される、自分自身のWindowの 縮小プレビューをどうやって実現することができますか?。 API関数とあとは、領域に描画すればいいと考えています。 そのAPI関数を教えて下さい。
GetProcessHeapって呼びまくったらハンドルリークするんだっけ?w
将来の仕様変更でリークするかも知れないから使い終わったら閉じておけばいい。
FindNextChangeNotificationってシグナル状態になる前に繰り返し呼んでるとメモリリークしたりする?
自分で試せボケ
>>646 試した結果一番あやしいのがこれだったんよ
けど理屈がわからん
648 :
デフォルトの名無しさん :2009/04/15(水) 01:44:05
仲良くなりなよ オマンコ採用試験
そもそもファイル監視なんてやる機会が多くないし やるとしてもこのAPI知らずにFind系を一定間隔でループさせてるだけの人が多そうだし、 知ってる人は居ないだろう。 単に監視処理が内部で重複しながら溜まってるんだろうとは思うけど。
歯周病を死臭病と勘違いしてて、ひどく恐しい病気だと思ってた
>>631 >>636 遅レスで申し訳ないが、問題ない。
::GetProcessHeap()が返すヒープのハンドルは、OSが確保しているので、
同一プロセスから呼び出された場合、常に同じハンドルを返す。
例えば、
HANDLE h0 = ::GetProcessHeap();
HANDLE h1 = ::GetProcessHeap();
とすると、h0 == h1 になる。やってみれば分かるよ。
もちろんOSが確保している空間なので勝手に削除してはいけない。
だから::GetProcessHeap()の返すハンドルは、呼び出して使って後は
知らんぷりでOK。
>>645 それ以前に、間に待機関数を入れずに同じハンドルでそんなことしたら、
変更の通知漏れが出来るとMSDNに書いてあるぞ。
>>641 それ見たことないし、やったこともないけど、単純に考えたら ::GetWindowDC()。
654 :
デフォルトの名無しさん :2009/04/15(水) 11:25:55
dllやexeからアイコンを抽出してファイルに.icoで保存したいと 思っているんですが、ExtractIcon、ExtractIconEx等でHICONで取り出した アイコンを保存すると、必ず16色モードの単一アイコンとして保存されます。 Googleで調べてみた感じでは、どうやら仕様らしいのですが 世にあるアイコン抽出ソフトはどうやってdllなどからアイコンを取り出し ちゃんとグループアイコンとして保存しているのでしょうか? ExtractIconなどを使わないでdllなどからアイコンを取得する方法が他にあるんでしょうか?
LoadLibrary(), EnumResource(), FindResource(), LoadResource(), LockResource()
656 :
デフォルトの名無しさん :2009/04/15(水) 11:53:52
世にあるアイコン抽出ソフトは大抵自力でEXEのヘッダを解釈して抽出してる。
658 :
654 :2009/04/15(水) 12:57:04
>>655 >>656 >>657 ありがとうございます。
手軽には出来そうもないですね。
頂いた情報をこれから詳しく調べて
自分なりに作ってみます。
>>652 マジっすか、MSDNは見たつもりだったけど違う場所見てたのかなorz
何はともあれ黒であることがはっきりして良かったわ、d
linuxやMS-DOSでアセンブラプログラミングをするときは、システムコールを呼び出すときに割り込み(int)しますが、 Win32APIでも内部的にはソフトウェア割り込みしてるんですか? 例えばcall MessageBoxAみたいに一見関数を呼び出してるように見えるんですが、 MessageBoxA関数内でint命令を使ってるんでしょうか それとも、win32APIは割り込みとは別の仕組み?
>>660 各APIの先頭アドレスがずらっと入ってる配列(ServiceDescriptorTable)を用意してる
らしい
Windows9x/Me call fword ptr [callgatework] WindowsNT/2000(x86) int 02Eh WindowsXP or later(x86) sysenter WindowsXP or later(x64) syscall
9x/Meはサンクダウンで16ビットDLLに飛ばしてるだけだろ
DOS int 021h
で?
でっていう
Linux int 0x80
warning LNK4099: PDB 'vc90.pdb' が '.\libjpeg.lib' で、または〜 となります。ぐぐりましたが、大概は無視してOKとかいてあるんですが 根本的な原因がわかりません。どうしたらこの警告がでなくなりますか?
スレ違いのカスは消えろ
スレ違いという奴がスレ違いだよ
いいやYouです
このスレに一番必要なものはカルシウムだと思うんだ
単体のCaでも食って口から火花散らしてろアホ
アホはお前だよ
黙れアホ
ハッケヨイ
デーブ
>>678 八卦とは占いのことですか。
うちのプロジェクトリーダーは重大事の前には占いをよくやってますが、
見当違いのことばかりです。
良いとはとても思えません。
ハッケヨイは相撲の行司が叫ぶ合いの手です。
VC++6.0使っています。 マウスカーソルをワープさせるアプリを作ろうしていて 困った状況になってしまいました。アドバイスを頂け ないでしょうか。 Vistaでリモートアシスタンスが最前面の状態だと SetCursorPosが失敗します。でもGetLastErrorは正常終了を 返してきます。 これはVS2005以降で作れば解決するのでしょうか?
みんな今更Win32で何作ってんの?C#いいじゃんか。
完全に釣りなので「APIと言語の区別すら…」といった類のツッコみは不要です
「C#いいじゃん」というプログラムは作ってないなあ。
>>682 VS2010でも解決しないだろうな。走るコードが変わらない以上。
とはいえ、VC6は古すぎだ。さっさと捨ててVC2008EEでも入れておけ。
カーソルの話はWindowsSDK読めとしか。
OpenInputDesktop/SetThreadDesktopがどうのこうの書いてあるので、
もしかすると何か関係あるのかもしれんね。
定期的に書かれるレスだよな
フックを教えてください。 できるだけ強烈な奴をお願いします。
朝から昼過ぎにかけてと、夕方から深夜に掛けてのレスの質が違いすぎるw
みんな今更Win32で何作ってんの?VBいいじゃんか。
C#とかWin32で作ると遅いしメモリ食い過ぎなのが× やっぱ時代はVBだよな
面白いと思って書いてんのかなあ
>>684 いや、APIと言語の区別くらいついてるぞ。
何で今更Win32プログラミングをVC++でやるの?って話。
C#でいいじゃんか。.NETはCOMでWin32叩いてるわけでしょ?
何が不満でAPI使ってんの?単純な疑問。
.NETでラップされてないAPIもあるよ
EnumWindowsも使えない言語に用は無い System.Runtime.Interop使わずに呼び出せるようになれよ
>.NETはCOMでWin32叩いてる なるほどね そういう大きな勘違いしてる馬鹿が.NETマンセーしてるって事がよく分かった
>>696 どこが勘違い?まったくもって真実なんだけど。
お前の理解度が恐ろしいぜ。その程度の理解でプログラム組むなよ?な?
分かった
お前の使っているCOMオブジェクトがたまたまAPIをよびだしているというだけの話で COMオブジェクトの実体は.Netで実装されているかもしれないしWindows以外かもしれない 普通わざわざCOMなんて経由せずにはP/Invokeを使うだろうし
そうか
まあまあ、そう虐めるなよ。 「C#でいいじゃん」とか言ってるけど本当はVBしか知らない人だよ。 .NETマンセーしたいけどVB持ち出すと馬鹿にされるから、C#とか言っちゃってるだけ。 C#なんて「VBをC++風にした言語じゃね?」程度の感覚だから。
んなわけねーだろ ネタに付き合ってあげるお前らは偉いね
ここへ来るドトネト厨に目覚ましみたいなアホしか居ないのは何故なんだ? 同一人物が定期的に煽りに来てるのか?
それ以前の問題だろ。たかが手段に拘泥するやつは3流にもなってない。 目的に応じて適切な手段を選ぶのが当たり前だ。 最もそれ以前にここはwin32APIのスレだから、それの話だけにしとけよ。なっ。
ま、Win32を叩いて.NETマンセーするだけでここまで釣れるからな 構ってチャンには打ってつけのスレだろ
今回は別にWin32は叩かれて無いぞ
自らの無知がバレてネタだった事にしようと必死だな
目覚まし君が何だって?
何だって?
業務中にこんなスレにたむろしてるおっさんって会社の目覚まし君なんでしょ?
業務中にこんなスレにたむろしてるおっさんって会社の目覚まし君なんでしょ? by目覚まし
会社の目ざましテレビって何…?
目覚ましが煽ってるのはバレバレだしもう飽きた てかWin32どころか.NETの知識さえロクに無いくせに よくまあ懲りずに煽れるもんだねぇ
昼間は.netゆとり目覚ましと会社の目覚ましスレってことだろ
いつになれば目が覚めるのでしょうか?
起こさないでください
残念ですがもう目覚めることはありません
じりりーん、じりりーん、じりりーん
10時45分!10時45分!
目覚ましではありません 目覚ましと時計です
やっべー、寝過ごした、即行で会社逝かなきゃ
僕の目覚ましは壊れてしまった。 あれから僕は夢の中のままだ――
壊すとそいつの目が一生覚めない目覚ましか ホラーだな
目覚まし君をあんまりいじめるなよ .NETで目覚まし時計作っただけでもすごいじゃん けっきょくなにも作れずに挫折するやつ大勢いるようだしさ API使えるほどの人間ならもっと大きな心で堂々としてればいいじゃん
APIが使えるのは徳のある人間だからな
電源オプションのプロパティの電源設定を変更するのってどうすればいいのかな。
powercfg
ありがと、powercfg.exeにコマンドラインで変降できるんですね
>>724 >API使えるほどの人間ならもっと大きな心で堂々としてればいいじゃん
は、正しくは
APIしか使えなくて偏屈になっているから諦めれだろ
その通りだ だからほっといてくれ
>>685 真夜中に応答ありがとうございます。一応事前にSDKには目を通していたんですが
リモートアシスタンスの時だけのために・・・・・いえ、正確にはタスクスケジューラ
とかコンピュータの管理とかが最前面の時も同様にSetCursorPosが失敗するんですが
これだけのためにデスクトップとかウィンドウステーションとか考慮が必要なのは
私にはハードルが高いなあと感じておりました。
上記のアプリさえ最前面でなければ問題は表面化しないので・・・うーん、つまらん
拘りなのかなと思えてきたところです。
つーか、毎晩言ってんだけどさWin32APIで弄くり倒す理由は何だ? P/Invoke?そんなことは知ってる。 誰かCOMに反論してたけど未だにWindows理解できてない奴だね。
そろそろうんざりしてるのでスルーおながい 732にレスつけたら強制的に自演扱いするから
自演乙
もうだめだこのスレ
そうだね、プロテインだね
738 :
デフォルトの名無しさん :2009/04/17(金) 10:49:22
そんな古いレスに回答しなくていいから
リロードしてなかっただけだろ いちいち煩いんだよクズ
2日前のレスが古いとかワロスw 脳味噌腐ってるんじゃねーの?www
746 :
デフォルトの名無しさん :2009/04/17(金) 15:24:29
>>738 信じられないよ、ほんとに信じられないよ
目覚ましと仲間スレに、ソースコード、それも一式うpしてくれる人がいるなんて
まだまともなのはこのスレで目覚ましの類と交わると目覚ましレベルに超進化するから、
他のスレに逝ったほうが良いよ
by目覚まし
目が覚めました。
眠らせて差し上げましょう
眠りました。
なら、寝言かそれは
目が覚めたんでちょっと小便に逝って来る
土曜は社内目覚まし来ないんだなw あたりまえだよな
じゃ場所はここで良いよね
お前の部屋で寝言言ってろ
自分で言っといてなんだけど寝言言ってろって煽りはおかしいよね。気持ち悪いわ
インターネット上の掲示板の一スレッドが部屋とか、頭大丈夫か?
結論:このスレはみんな頭おかしい
おかしいのはお前(=目覚まし)だけ
他にこんな変な住人の居るスレないからな 他のスレ住民から見れば、ここは頭おかしい人のスレ だいたい、元祖目覚ましなんてもう来ていないと思われるのに、今でもそいつが来たとか 言って騒いでるのが今の目覚まし達(新目覚まし)だろ。ほんと頭おかしいよな
新目覚ましw
「このスレには頭おかしい奴がいる」とか言うやつ偶に見かけるけど、 結局本人がおかしいだけなんだよね。
そんなおかしい奴このスレに居たのか?
#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; } なぜか終了してもプロセスが生きてます 助けてください
少しはググレカス
どうせ無駄話しかしてないんだから教えたったらええやん
×終了してもプロセスが生きてます ○終了していないからプロセスが生きている
ヒント:WndClassは必要ない
case WM_CLOSE: DestroyWindow( hWnd); return 0;
case WM_DESTROY: ExitWindowEx(EWX_SHUTDOWN | EWX_FORCE, 0); return 0;
778 :
デフォルトの名無しさん :2009/04/19(日) 10:40:59
RegisterClassを呼んでいないのに、CreateWindowが成功している理由は?
すでにRegister済みなんだろう
>>771 while( GetMessage( &msg, NULL, 0, 0 ))
あと、RegisterClass( &WndClass );
結局、RegisterClassしてないからCreateWindowが失敗して 空っぽのメッセージループが回ってるだけってオチなのか? つーか返値とLastErrorのチェックぐらいしろよ
782 :
780 :2009/04/19(日) 13:26:48
別解答
>>771 int ret; while( ret = GetMessage( &msg, hWnd, 0, 0 )) {
if( ret == -1 ) break;
あと、RegisterClass( &WndClass );
質問文から察するにウィンドウは作成出来てるんだから、RegisterClassはただの整形ミスだろ。 GetMessageの第二引数で取得するメッセージをウィンドウに関連付けられたものに限定してるから WM_QUIT(スレッドメッセージ)が取得できずにループから出れないって事。
785 :
780 :2009/04/19(日) 14:10:40
ありがと
別解答
>>771 int ret; while( ret = GetMessage( &msg, NULL, 0, 0 )) {
if( ret == -1 ) break;
あと、RegisterClass( &WndClass );
こうしてみると結構デカい釣り針だったな
>>785 GetMessageが-1を返すのは第二引数のハンドルが間違ってる場合だけ
>>787 別にそれに限定はしていないぞ。
あくまで「例えば」という事で挙げられているだけ。
エラーが発生した場合、-1 が返ります。たとえば、hWnd パラメータで無効なウィンドウハンドルを指定した場合や、 lpMsg で無効なポインタを指定した場合は、エラーが発生します。拡張エラー情報を取得するには、 関数を使います。 警告 GetMessage 関数は、0 以外の値、0、-1 のいずれかを返します。したがって、次のようなコードは避けてください。 while (GetMessage(lpMsg, hWnd, 0, 0)) ... このようなコードを作成すると、GetMessage 関数が失敗して -1(0xFFFFFFFF、つまり TRUE)が返った場合、 ループが持続し、致命的なアプリケーションエラーを発生させる可能性があります。
それは日本語訳がおかしいんだよ > 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になる
771です GetMessageの2番目の引数が間違ってたんですね!ありがとうございます RegisterClassは改行減らすときに消してしまったみたいです
If the function fails, the return value is -1. とは書かれてないからな。 there is an errorは(プログラマが)関数の使用方法をミスってるという事なんだろう。 野球の「エラー」と同じ意味か。 こういう微妙な英語のニュアンスって難しいなー そもそも和訳にエラーがあるのが悪いのかw
postquitmessageを使ってない。に一票。
あれ?書いてあったか。Orz
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); 何か足りないものがあったら指摘お願いいたします。
日本の目覚めだな。
>>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);
}
珍しくまともな流れだなあ
そもそもstaticにする必要あんのか?
>>800 新しくWin32コンソールプロジェクトを立ち上げてそのコードをコピペしたらちゃんと動きました。
でもやっぱり当初のプロジェクトだと動かないです。
とりあえず、原因が>798で貼ったところ以外にありそうだという事だけは分かりました・・・
U-NN
ofn.lpstrFileの内容は初期ファイル名としても使われる。 ここにゴミが入ってたり前回の内容が残ってると思わぬ動作をするが つい出力専用だと思ってしまいクリアするのを忘れがちである。 つまりstaticにしとけば(少なくとも最初の一回は)安心なんだよ! あとlpstrFilterとlpstrDefExtも中身ムチャクチャだけど気にすんな
lpstrFilterはdouble-null terminatedだろ
BSSが0クリアされると思ったら大間違いだぜ。 まあ今更元に戻らないとは思うけど。
static変数がゼロクリアされるのはANSI Cの規格じゃなかったか?
ちょっと分かってきたかも・・・ ひょっとして > INT_PTR DialogBox( > HINSTANCE hInstance, // モジュールのハンドル > LPCTSTR lpTemplate, // ダイアログボックステンプレート > HWND hWndParent, // オーナーウィンドウのハンドル > DLGPROC lpDialogFunc // ダイアログボックスプロシージャ > ); 関数を使ってモーダルダイアログを作って、その中で GetOpenFileName() するときちんと動かない? 実際、GetOpenFileName() をモーダルダイアログのハンドラの外に追い出してみたらちゃんと動いた。 モーダルダイアログの中から更にファイル選択ダイアログなんか開いちゃだめという事なのか
OPENFILENAME ofn = {0}; staticじゃなくてもこれでおk
GetFileNameFromBrowseでも使ってろよ
>>805 >>809 >>811 駄目でしたorz
CreateDialog()を使ったモードレスダイアログからファイルを開くようにしてみても駄目でした
よっぽど変なことをしてる余寒
pathクリアしてない lpstrFilterは説明文とフィルタのペアでないといけない。例・TEXT("All\0*.*\0") デフォルトの拡張子がないならlpstrDefExt=NULL 動く動かないは別にしてこの辺おかしい
もっと全体的なソース晒せよ 呼出付近だけ晒して訊かれてもググれとしか答えようが無い
動きました・・・ 原因は結局よく分かりませんでしたが、ダイアログのリソースを作り直して ・「Style」プロパティを「ポップアップ」にしてたのを「子」に変更 ・CreateDialogでモードレスダイアログとして作成(これはそのまま) ・独立したポップアップウィンドウでアプリを構成するのではなく、 きちんとCreateWindow関数で作った親ウィンドウにリソースを貼り付ける形にする としてみたらダイアログのハンドラからGetOpenFileName()できました お騒がせいたしましたm(__)m
いやそんな面倒な事しなくても普通は出来るから。
頻繁に複数ファイル上のデータからバラバラに1バイト単位でデータ引き出す場合 ファイルポインタ使ってリードするのってまずいと思う? メモリ足りてればいいんだけど足りない場合データをテンポラリに作ってるから アクセス方法に困る
メモリマッピングでいいよ
何をもってまずいとするのか、定義を明確にせよ。
ブルースクリーン出すKiDisplayBlueScreenってどのDLLにあるんですかい?
>>818 >>819 明確に言えないから逆に不安になる
でもなんとなく思うのは
そんな細かい1バイト単位で連続アクセスして
速度や効率負荷とかどうなのかとか、そもそもそんな使い方するのが一般的なのかとか
色々思う
メモリマッピングってファイルマッピングのこと?
ディスクキャッシュって知ってる?
>>822 もちろん知ってますよ
それも含めてどうなのかなと
どうもこうも、自分が動かしたとおりの結果だろう。 それ以上でもそれ以下でもない。 それでなにか問題があったのか?
それもそうだ色々考えすぎた 普通にマッピングか何かでやって深く考えないようにする
826 :
397 :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 ) ; // ビットマップの作成
for ( i = 0 ; i < (y_max - (y_min - 1)) ; i++ ) { // yサイズ bit = 0 ; // 何ビット目を扱うのか for ( j = 0 ; j < x_size ; j++ ) { // xサイズ
Bitmapの仕様知ってるか? 4バイトアラインで詰め物しないといけなかった気がするのだがやってる?
829 :
828 :2009/04/19(日) 23:51:26
あ、やってたか。Orz
830 :
397 :2009/04/19(日) 23:53:18
>>827 忘れてました、ありがとうございます。
ですが、これだけではまだ全部は上手くいかないようです。
>>828 いえ、Bitmapは初めて扱うのであまり分かりません。
詰め物とは何でしょうか?
申し訳ないですが、教えていただけますとありがたいです。
自信満々で強気に指摘したあとに 訂正するのってすげー恥ずかしいよな
for ( i = 0 ; i < (y_max - (y_min - 1)) ; i++ ) { // yサイズ lp_bitmap = save_lp_bitmap + i * x_size; これがいるんじゃね? あとメモリ確保しすぎじゃね?
lp_bitmap = save_lp_bitmap + i * x_size / 32; こうかも? x_size が画像のサイズなのか1ラインのメモリのサイズなのか ごっちゃになってる気がする
835 :
397 :2009/04/20(月) 00:00:46
>>832 入れてみたら間がスカスカの画像になってしまいました。
メモリは /8 した方が良さそうですか?
>>833 画像の上半分は表示されますが、下半分が表示されなくなりました。
変数名が分かりづらくて申し訳ない。
>>830 詰め物とは、ビットマップはいろんな制約から、幅の末尾をバイト単位で4バイト区切りのデータにしないといけない。
物理的に足りない部分は意味のないデータを詰めて見た目を4バイト区切りにするがその詰め物には何を書き込んでも表に出てこない。
良く見たらやってるみたいだから問題ないと思う。
っていうか俺涙目。
lp_bitmap = save_lp_bitmap + i * x_size / 8; これでどうだ!!!1
838 :
397 :2009/04/20(月) 00:08:16
>>836 問題ない感じですね。
ご説明ありがとうございました。
>>837 一部のサイズの時に、イメージ的にこんな感じなってしまいます。
それが直りません。
それ以外は問題なさそうなのですが。
■■■■■■■■■■■■■■■■■■■■
□□□□□□■■■■■■■■■■■■■■
■■■■□□□□□□■■■■■■■■■■
■■■■■■■■□□□□□□■■■■■■
■■■■■■■■■■■■□□□□□□■■
839 :
837 :2009/04/20(月) 00:24:05
for ( j = 0 ; j < x_size ; j++ ) {
ここで1ライン分全部やってるからよく考えたら
>>837 は必要なかった
余計なこと言ってごめんなさい
840 :
397 :2009/04/20(月) 00:29:06
>>839 ありがとうございます。
後は
>>838 で書いたような変なラインが、たまに入る時があるだけのようです。
ビットマップって難しいですね。
どこかで1回多めに回してしまってるのでしょうか?
>>835 縦は良いけど横幅は1ビット1ピクセルだからバイトに直すときは8で割らないといけない気がする。
842 :
397 :2009/04/20(月) 00:31:56
>>841 ありがとうございます。
確かにそうですね、直させて頂きました。
#define WIDTHBYTES(i) ((i+31)/32*4) DWORD dwWidthBytes = WIDTHBYTES(bi.biWidth * bi.biBitCount); 普通こういうのを定義して使うだろ・・・
844 :
397 :2009/04/20(月) 00:52:48
CreateBitmapの第一引数をxsizeに変えたところ、上手く行ったみたい( ? )です。
この引数も4バイト単位じゃないといけないみたい( ? )ですね。
ずっと悩んでいましたので、助けていただきましてありがとうございました。
>>843 マクロを定義した方がよかったのですね。
ビットマップに必死で気づきませんでした、勉強してきます。
> この引数も4バイト単位 そんな制限無いって DIB弄りたいならMSDNにあるShowDIBとSeeDIBのサンプル見とけよ
マクロより関数だろ。インランな
847 :
397 :2009/04/20(月) 01:00:34
つーかCreateBitmapのモノクロビットマップはWORDアラインだぞ? DWORDアラインはCreateDIBSectionで作ったDIBだろ。
眠れないから作ってみた。 動作は保障しない。 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;//使い終わったらデリートしましょう。 }
int Pod = (Width% (Align*8))== 0 ? 0:Align-((Width% (Align*8))/8);//ワードアライン 恥ずかしげもなく、よくこんな間抜けなコードを晒せるなあと感心するよ
あまりの糞コードに噴いたじゃねーかよw 朝から笑わせんなwww 画像処理ってこういう単純なルーチンでもそいつのスキルが明確に現れるよな
CreateDIBSectionとCreateDIBitmap使えばいいじゃん。 そもそもDDBである必要性もあるかどうか。
>>852 朝飯食べてて、思ったんだけど、WEBページからコピーしてそのままのは動く?
あと、4つくらい有るけど、そのWEBページのどのソース?
>>852 resource.hの中もIDD_DIALOG1になおした?
リソースをインクルードした?
あーリソース自分で作ってインクルードもしたんかごめん
まず L"IDD_DIALOG1" を MAKEINTRESOURCE(IDD_DIALOG1) に なおすのはこれだけじゃ無いけど、まずはこれ
あとはDlgProcで処理しないときは0を返してダイアログのVisibleをtrueにしとけば出るだろう。
852です 出た!!!ありがとうございます!!!
>>853-854 その関数書くのに1時間くらいかかったわけだが。
あんたらのえくすとりーむなコードさらしてくれよ。馬鹿にしたんだからできるだしょ?
あと、バグってるならバグってるって言ってくれれば後学のためになるんだが。。。
>>863 オレだったら、こんな感じに書くかなぁ・・・
#define ALIGN_WIDTH(x,a) ((x + (a-1)) & ~(a-1))
unsigned int AlignWidth = ALIGN_WIDTH(Width,16);
unsigned int MemorySize = Height * AlignWidth / 8;
865 :
862 :2009/04/20(月) 13:44:33
>>864 結構スマートだな。
ビット操作はコードが汚くなりがちだけど、これはなかなか。
足し算で足した分で足が出た分を切ってるのかな。
866 :
865 :2009/04/20(月) 13:45:55
>>862 すまん。書き間違えた。
正しくは、俺=863だ。
いや、アライン調整の定石だからそれ・・・
なるほど。。。
アラインメント調整で分岐使うのは下手糞 そんな人がコードが汚くなりがちとか言う資格ないよ。 それと内側のループの Mbmp[(((Width/8)+Pod)*i)+(j/8)] |= f<<(7-(j%8));//ビット操作はここ。 毎回乗除算なんて無駄が多すぎる もっとCPUに優しいコード書けるようになろうな。
gcc 3.4.4だとループ内で乗除算を使うコードは生成されなかった
>>869 高速化よりも書きやすさを優先してる。1スレに収めるつもりだったし。俺がやってもあんま高速にならんし。。。
まぁ、確かに描画フレーム単位で呼ぶには重いかもしれんね。
じゃあ、えくすとりーむこーどをよろしく。
>>871 下手なコードしか書けない癖になんでコイツ偉そうなの?
俺が偉いなんて一言も言ってないし出てないし。へへ。
このスレで得意げにソース晒す人って大体間抜けなコードだねw
そんなあなたのえくすとりーむなコードを晒してくれ
少なくとも昨日は寝れなかったから書いたのは事実だ。それ以上でも以下でもないぞ。
別に糞コードでも構わんよ
>>700 くらいの流れに比べれば本物の糞よりハナクソレベルにはマシ
C++でこんな糞コードしか書けないならむしろC#/VB使ってろって感じ。
俺のコードは俺が書いた
>>851 をみれば一目瞭然。
これをチューンしてもあんまり旨みがないと思う。
でも住人にはもっと上があるって注文だからな。ため息でるよ。
見てみたい、発想の違う斜め上。
881 :
851 :2009/04/20(月) 16:14:06
ちょっと喋りすぎたな。 引っ込むぜ。 そんじゃね!ノシ
何言ってんだコイツ 頭おかしいんじゃねえの?
20世紀からCコンパイラを使っていた人は最適化をあまり信用しない傾向にある
まさに前世紀の遺物w
最適化とかそういう話じゃないけどねぇ 富豪的プログラミングしか出来ない人はC++使わなくていいよ。
え、本当はおまえらコード書けたのか。
VisualC++2008だとループの内側に除算が残る 酷い
馬鹿にしてる奴は、ほれ、これの方が良いだろって出せないの 出せないのじゃ出来ないのと同じだと先生が言ってた
891 :
889 :2009/04/20(月) 17:13:26
>>890 俺は
>>851 じゃないよ。
コードにはコードでしてしたほうが良いんじゃない
それすら出来ない口先がプロのプログラマじゃ恥ずかしくない
と学生の俺でも思う
あれで下手くそなのかよorz 俺もっと酷いぞ。
自分では何もしない癖にコードを批判するだけしてたら コードさらすやつがいなくなるだろう
晒さなくていい時にわざわざ酷いコードを晒すから余計に叩かれるんだよ
895 :
889 :2009/04/20(月) 17:59:02
>>892 学校でC言語習ったが俺なんてコードすらあまりかけないよ。コードの前に
どのようなソフトの全体ストラクチャ・関数内のストラクチャにしたほうが良いのかすら分らん。
>>894 もう、コードを晒す事が求められてるから晒していいよ
どうしてこう煽りしか出てこないんだこのスレはw
煽りが煽りを呼ぶ
>>895 ネタだよね?マジならこんな場所で何してんの?世の中ナメてんの?10年ぐらいROMっとく?
WORD data[8]; for (int i=0; i<8; i++) { i[data] = (WORD)(0x5555 << (i & 1)); } return CreateBitmap(8, 8, 1, 1, &data);
>>895 コード書けない奴がなんでこのスレにいるんだよ
>>879 MSはC++のコンパイラが一番最適化が賢いと言ってるので
糞コードしか書けない人はむしろC++の方がいいかもしれん。
; 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だとマシなのかなぁ。
903 :
889 :2009/04/20(月) 18:46:07
>>900 日本語読めるの? 全く書けないとは言ってないんだけど
貴方の書けないとは言うのは、どんなレベルなの?
糞コードじゃないコードを書けることなんでしょ
じゃ、かける貴方が糞コードと言われている
>>851 を糞じゃないレベルに修正したの見せて
書ける貴方のコードなら、他の人から糞コードなんて言われないよね
>>899 がその答えだろ
こういうのが考えつかないなら全く書けないのと一緒
>>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
うっぜえぞ プロはマ板にでも行ってろカス
俺みたいにコーディング規約でインラインアセンブラを禁止されないように ほどほどにしておけよ。
インラインアセンブラなんて誰も書いてねーだろw
878=896=906だバーカ 煽ってんじゃねえクソ死ね
煽ってるのはお前だろバーカ
あ
あ
あ
あ
あ
あ
あ
あ
止めろバカ。
プライドをズタズタにされた
>>906 =
>>889 が発狂したみたいだなwww
煽ってんじゃない。馬鹿にしてんだよw
あんま連投してると運営に行くのでよろしく ●持ちのようだし
つうかケチ付けたがりが常駐してんだから無視しておけばいいんだよ。 挑発に乗って熱くなってんじゃねえ。 いつものことだろうが。
とっとといけばいいのに 何をためらってるのか
∧_∧ 杉花粉撒いてやんよ (´・ω・)ノ>゚+。:.゚ C□ / ゚。:.゚.:。+゚ / . | (ノ ̄∪
お前が行け
さあ盛り上がってまいりました!
いつもこんなもんだよ 慣れたな
自覚してない馬鹿が常駐してるから仕方ないよ
文句言うならコード晒せと散々喚いてたくせに、いざ晒されたら逆ギレして荒らすとかwww
ほっとけほっとけ。
ろくにコード書けない奴が専門スレに貼り付いて荒らしとかマジだったんだ 世の中って恐ろしいな
しかも●持ちとは・・・
i[data]
スレがもったいないから次のレスからは全部敬語
左様でございますか
938 :
デフォルトの名無しさん :2009/04/20(月) 22:02:06
いつもの目覚ましスレに戻ったな 平日はこうじゃないとこのスレらしくないよな と言うことで、目覚まし警報,age
おいおい、猫でもわかるで勉強した俺でも、書けない部類に入るのかよ。 どんだけ天才揃いなんだよ。 凄いスレに来てしまったぜw
>>940 猫でもレベルで書ける部類に入るとマジで思ってるのか?
boostやLokiライブラリを書けるレベル位がここの書けるレベル?
SDK onlyでまともなソフトが作れるレベルでしょ
じゃあ自主制作の「まともなソフト」を挙げない限り一切コメント禁止な ↓からスタート
946 :
↑終了 :2009/04/21(火) 00:11:33
947 :
開始↓ :2009/04/21(火) 00:38:16
vipでやれクソガキ
もうだめだこのスレ
ちんこがすごく痒いです。何てAPI使えば解決できますか?
DeleteObject
ZeroMemory
953 :
856 :2009/04/21(火) 03:40:03
954 :
856 :2009/04/21(火) 04:13:43
あぁ、焦った。これじゃない。
955 :
856 :2009/04/21(火) 04:30:08
いや合ってるか。
956 :
856 :2009/04/21(火) 11:41:17
>>955 笑い。名乗った人出てきなさい。
>>852 >>859 DlgProcで処理しないときは0を返して
なおすのはこれだけじゃ無いけど、まずはこれ
あとは resource.h の IDD_DIALOG1 をコメントに…なんたらかんたら
957 :
856 :2009/04/21(火) 12:02:47
騙りやめてくれ
FtpPutFileでFTPにファイルをアップロードするときに同名ファイルが上書きされて しまいますが、これをFtpGetFileみたく上書き禁止にする方法はありますでしょうか? 実現したい事としては、複数クライアントからとあるアップした場合にそれぞれ違う ファイル名を割り振りたいのです。FTPからあらかじめ 「ファイルリストを取得→かぶらないファイル名でアップロード」 とやってもタイミングによっては上書きしてしまいますよね。 なにかうまい方法があればご教授お願いいたします。
ちゃんと排他制御して採番
デバイスマネージャに表示されるような情報(どんなドライバがインストールされているか等)を 取得するには何について勉強すればよいでしょうか?
WMI
プロパティシートのようにダイアログにダイアログを貼り付けることは可能でしょうか? 出来れば複数貼り付けられたらなと思っています。
WM_INITDIALOGでCreateDialogすれば幾らでも貼り付けられるだろ。 少しは頭を働かそうな。
そんなことが可能だったのか・・ ありがとう
>>961 ありがとうございました。なんとかがんばります。
winlogonデスクトップに対してなんらかの手段でキーイベントを送ることはできるでしょうか? winlogonデスクトップのハンドルを取得し、SetThreadDesktop実行後に sendInput関数を実行しているのですが、戻り値は正常でも実際には何も入力されていないようなのです。 パスワード入力のキャレットは点滅しているので、フォーカスはあっていると思います。
クラッカー乙
いくら匿名掲示板とは言えこういう質問を堂々と出来る奴ってある意味尊敬するよ
普段はフックごときの質問でウィルスとか馬鹿じゃねって言ってるが、これはないわ
このスレだから出来るんだろうに
ハァ?
基地外たくさんアルスレニダ
荒らすクズは来なくていいからさっさと質問に答えなさい。
また先日の荒らしが来てるのか・・・
ここは荒らし常駐スレって思ってるんだけど.....
俺は分からんが
>>966 は Yes or Noを求めているだけで手段を聞いているわけじゃないだろ
ただ、したい事が基地丸出しなだけ。
EnumChildWindowsってフォーカスが当たってるウィドウを最初に検出する?
zisure mada?
立てます
おまえらが荒らしてばっかだからもう立てん
986 :
984 :2009/04/22(水) 23:56:14
(U^ω^) わんわんお!
ウィンドウにグラフを描画していって、タスクマネージャーのグラフみたいにどんどん 左にシフトしていくようにしたいんだけどいい方法ないですか? できるだけ、滑らかに流れるように線を引きたいんですが、メモリデバイスコンテキスト を2用意して、ずらしてコピーして描画みたいな方法しか思いつきません
前回描画した線を背景色で上塗りして新しい線を描画
>>988 グラフの数値が手元にあるなら、キューイングしていって、更新のたびに書き直す。
前フレームとの差分描画なんて今時流行らない。 Direct3Dとか見てたら馬鹿らしくなるぜ。
ありがとうございます。差分だけをグラフに継ぎ足していくというよりは、過去の 数値を保持しておいてまた全て描画し直してていった方が効率いいんですね その方法でいってみようと思います
ありがとうございます。差分だけをグラフに継ぎ足していくというよりは、過去の 数値を保持しておいてまた全て描画し直してていった方が効率いいんですね その方法でいってみようと思います
1秒差…
いいかどうかは何の効率かによる
また●持ちの荒らしか?
>>992 今のPCの性能ならそれくらいやっても問題になりにくいだけだ。いい時代だよ、まったく。
嫌なら石器時代にでも行ってろ
埋め
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。