Win32API質問箱 Build77at TECH
Win32API質問箱 Build77 - 暇つぶし2ch175:デフォルトの名無しさん
09/03/04 20:58:34
Windows VISTA SP1
VS 2008

URLリンク(homepage2.nifty.com)をみて
以下の様に組み込んだのですが、この プリントダイアログを出した後に、
ウィンドウを閉じてプログラムを終了させると、
なぜか、Windowタスクマネージャ→プロセスに
*.exe が残ってしまいます。残ってしまうので次ビルドすると
error PRJ0008 : ファイル '*.exe' を削除できませんでした。
とメッセージが出てしまいます。
このダイアログを出さない場合は プロセスに*.exeは残らずきちんと消えてくれます。
なぜなのでしょうか?

176:デフォルトの名無しさん
09/03/04 20:59:51
ソースは以下です。
if (PrintDlg(&pd)==TRUE)
{
StartDoc(pd.hDC, &di);
StartPage(pd.hDC);
GetTextMetrics(pd.hDC, &tm);
//File
//0枚目
wsprintf(PrintBuf,CPrint.szStrFile,0,Common_Data->File0);
TextOut(pd.hDC, 100, tm.tmHeight * 0, PrintBuf,strlen(PrintBuf));
//1枚目
wsprintf(PrintBuf,CPrint.szStrFile,1,Common_Data->File1);
TextOut(pd.hDC, 100, tm.tmHeight * 1, PrintBuf, strlen(PrintBuf));
//2枚
wsprintf(PrintBuf,CPrint.szStrFile,2,Common_Data->File2);
TextOut(pd.hDC, 100, tm.tmHeight * 2, PrintBuf, strlen(PrintBuf));

EndPage(pd.hDC);
EndDoc(pd.hDC);
//DeleteObject(hPen);
DeleteDC(pd.hDC);
}

177:デフォルトの名無しさん
09/03/04 21:00:03
なんか残ってるんだろうね。

178:デフォルトの名無しさん
09/03/04 22:02:12
XP SP2では発生していなかったと思います。
VISTAでは新しい関数を使うのかと思い調べたらPrintDlgEXがありましたが
構造体に何を設定すればいいのか 分からない。必要最低限の設定
でいいんですが・・。

179:デフォルトの名無しさん
09/03/04 22:04:01
指定のウィンドウの一つ下にあるウィンドウのウィンドウハンドルを得る関数って何でしたっけ?

180:デフォルトの名無しさん
09/03/04 22:19:54
GW_CHILD を指定して GetWindow() とか?

181:デフォルトの名無しさん
09/03/04 22:21:00
StartDoc から DeleteDC までを全部コメントアウトしても同様?

182:デフォルトの名無しさん
09/03/04 22:25:53
>>179
GetNextWindowのことか?

183:デフォルトの名無しさん
09/03/04 22:29:48
>>181
StartDoc から DeleteDC をコメントアウトしても同様です。
PrintDlg(&pd); と単独で記述して プリントダイアログを
出したあとに すぐにキャンセルして そしてプログラムを
終了させても プロセスに残ってしまいます。



184:デフォルトの名無しさん
09/03/04 22:35:42
構造体の中身は?

185:デフォルトの名無しさん
09/03/05 00:33:31
>>162>>164
グーグルで最初に出てくるサイトのサンプルをVB.NETに直して色々試したのですが
取得失敗と出て終わってしまい困っています。
res = AccessibleObjectFromWindow(lngHWND, OBJID_CLIENT, IID_IAccessible, objAcc)
でlngHWNDに数字が入っていて、OBJID_CLIENTに-4が入っていて、
IID_IAccessibleの定義は
Private IID_IAccessible As UUID
Private Structure UUID
Dim Data1 As Integer
Dim Data2 As Short
Dim Data3 As Short
Dim Data4() As Byte
Public Sub Initialize()
ReDim Data4(7)
End Sub
End Structure
でイニシャライズもしていて、


objAccは Dim objAcc As IAccessibleのように定義しています。

APIの宣言は
Private Declare Function AccessibleObjectFromWindow Lib "oleacc" (ByVal hWnd As Integer, ByVal dwObjectID As Integer, ByRef riid As UUID, ByRef ppvObject As IAccessible) As Integer
こうなっています。


どこか悪いところとかありましたら教えて頂きたいです。

186:デフォルトの名無しさん
09/03/05 00:46:06
VB(笑)

187:デフォルトの名無しさん
09/03/05 00:53:22
本題からは逸れるけど、
UUIDなんて構造体作らなくても、System.GUIDを使えばいいし、
hWndの型はIntPtrのほうが適切。

とここまで書いて、UUID構造体の定義がまずいような気がしてきた、Data4のあたり。
System.GUIDにするとどうだ?

188:デフォルトの名無しさん
09/03/05 01:16:42
>>187
レスありがとうございます。
System.GUIDというのは
Dim IID_IAccessible As Guid = Guid.NewGuid()
こうすれば良いでしょうか?

hWnd関係は全部IntPtrに置き換えてみました。
TextBox1.Text = GetSysLVHwnd().ToInt32
で65698という数字が帰ってくるので大丈夫だと思います。

何かダメそうなところが分かりましたら教えていただきたいです



189:デフォルトの名無しさん
09/03/05 01:18:04
>>188
API定義これでどうよ?使ったことないけど。

Private Declare Function AccessibleObjectFromWindow Lib "oleacc" (ByVal Hwnd As Int32, _
     ByVal dwId As Int32, _
     ByRef riid As Guid, _
     <MarshalAs(UnmanagedType.IUnknown)> ByRef ppvObject As Object) As Int32

190:>>188
09/03/05 01:25:00
よく見てみると、その後こう使ってるのか。動くのかな?
著作権とかはしらね

URLリンク(www.pinvoke.net)


   Private Sub Form2_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles MyBase.Load
    Dim varChild As Accessibility.IAccessible
    Dim hWnd As Int32 = GetForegroundWindow()
    Dim ID As Int32 = 0
    Dim IID_IAcce As Guid = New Guid("618736E0-3C3D-11CF-810C-00AA00389B71")
    Dim aaVal As Int32 = AccessibleObjectFromWindow(hWnd, ID, IID_IAcce, varChild)
    End Sub

191:デフォルトの名無しさん
09/03/05 01:48:30
レスありあとうございます。
>>189を試してみましたが
Can not marshal parameter #4: Invalid managed/unmanaged type combination
(Interfaces must be paired with Interface).
というエラーが出てしまい対応できませんでした。

>>190
New Guid("618736E0-3C3D-11CF-810C-00AA00389B71")
を定義すると取得失敗へ行かなくなりました。
varChildに何か入っているようです。
最初のグーグルで最初に出てくるページのサンプルでvarChildを調べる部分でエラーが
出てしまいましたが、また色々やってみたいと思います。
何をやってもNothingのままだったので>>33がやっと解決できましたみたいでありがたいです。
ありがとうございました。

192:デフォルトの名無しさん
09/03/05 10:19:12
>>191
インターラプト入れれば、マーシャルでエラーでない

Imports System.Runtime.InteropServices

Private Declare Function AccessibleObjectFromWindow Lib "oleacc" (ByVal Hwnd As Int32, _
     ByVal dwId As Int32, _
     ByRef riid As Guid, _
     <MarshalAs(UnmanagedType.IUnknown)> ByRef ppvObject As Object) As Int32

193:デフォルトの名無しさん
09/03/05 10:47:34
>>174
そうだ!!
WM_COPYDATAがあったんだ!
ありがとうありがとう

194:デフォルトの名無しさん
09/03/05 18:03:33
ツールバーを消したいんですけど、手順的にはどうすればいいのですか?
サイズを 0,0,0,0 にしたり SW_HIDE とか HWND_BOTTOM を試しても
うまくいかず、「上に」詰めた領域がツールバーに隠れるんですが、、、

195:デフォルトの名無しさん
09/03/05 18:39:06
>>194
ShowControlBar()

196:デフォルトの名無しさん
09/03/05 18:45:54
ごめん間違えた。ShowWindowのSW_HIDEで消えないの?

197:デフォルトの名無しさん
09/03/05 22:18:58
まともなのが共産と国民新党しかないとかどれだけw

198:デフォルトの名無しさん
09/03/05 22:23:58
ひでえ誤爆

199:デフォルトの名無しさん
09/03/05 22:57:10
>>192
Imports System.Runtime.InteropServices
は書いたのですがエラーになってしまいました。

もう一つ教えて頂きたいのですが、
Dim objAcc As IAccessible
という宣言があるのですが、
objAcc を入力したあとにピリオドを入力すると
メンバが出るようにしたいのですが方法がありましたら教えて頂きたいです。


200:デフォルトの名無しさん
09/03/05 22:58:46
おっとそこまでだ
その質問はVB.NETスレでやってくれ

201:デフォルトの名無しさん
09/03/05 22:59:28
>>199
何度もすみません。
現在デスクトップ上のアイコンの名前がリストボックス登録されるところまで出来ました。
(グーグル検索の最初に出てくるサンプルをVB.NETに書き換えて)

202:デフォルトの名無しさん
09/03/05 23:10:53
>>197
どういう話題のスレか分かってしまうw

203:デフォルトの名無しさん
09/03/05 23:44:55
プログラムが立ち上がったときに、エディットコントロールに初期文字が表示されるようにするため、
プログラム内からエディットコントロール内に文字を打ちたいのですが、どのようにすればよいでしょうか?

SendMessageを使って、例えば「7」を入力しようとしましたが、ダメでした。

SendMessage( hEdit, WM_KEYDOWN, '7', 0 );

ご助言、お願いします。

204:デフォルトの名無しさん
09/03/05 23:49:55
>>203
WM_INITDIALOG 内で SetWindowText()

205:203
09/03/06 00:02:49
>>204
ありがとうございました!!

206:デフォルトの名無しさん
09/03/06 09:29:08
>>194
SetMenu(hWnd, NULL);


207:デフォルトの名無しさん
09/03/06 19:31:44
トップレベル・ウィンドウに

BOOL MoveWindow(
  HWND hWnd,
  int X,
  int Y,
  int nWidth,
  int nHeight,
  BOOL bRepaint
);

と、

BOOL SetWindowPos(
  HWND hWnd,
  HWND hWndInsertAfter,
  int X,
  int Y,
  int cx,
  int cy,
  UINT uFlags
);

を、 X、Y、W、H とも同じ値にして実行したときに出来るウィンドウのサイズと座標が
全く異なるんですが、これは一体どういうことなんですか??

208:デフォルトの名無しさん
09/03/06 19:48:15
スクリーン座標とクライアント座標じゃね?
WndPosがクライアントだった希ガス

209:デフォルトの名無しさん
09/03/06 22:34:14
悪い、SWP_NOSIZEとSWP_NOMOVE指定してたわ

210:デフォルトの名無しさん
09/03/07 07:39:56
そーゆーオチかよwww

211:デフォルトの名無しさん
09/03/07 16:41:43
あああああああああああああああああああああああああああああああああああああああ

212:デフォルトの名無しさん
09/03/07 16:43:47
何?何?

213:デフォルトの名無しさん
09/03/07 16:49:03
酒飲んでて屁だと思ったのが下痢だった

214:デフォルトの名無しさん
09/03/08 01:14:34
OS:Windows VISTA SP1
ボタンを押したらOS情報取得するプログラムを以下の様に記述
しました。

GetVersionEx(&osv);
switch (osv.dwPlatformId)
{

case VER_PLATFORM_WIN32s:
MessageBox(NULL, "Win32sです", "Platform", MB_OK);
break;
case VER_PLATFORM_WIN32_WINDOWS:
MessageBox(NULL, "Windows95です", "Platform", MB_OK);
wsprintf(str, str_format, LOWORD(osv.dwBuildNumber));
MessageBox(NULL, str, "OK", MB_OK);
break;
case VER_PLATFORM_WIN32_NT:
MessageBox(NULL, "WindowsNTです", "Platform", MB_OK);
break;
結果、なぜか、VISTA上で動かしてボタンを押すと、
VER_PLATFORM_WIN32_NT:
MessageBox(NULL, "WindowsNTです",
となってしまいます。
VISTAを判別するためのdefineってなんでしょうか?
GetProductInfoで細かく取得するつもりはないんですが・・。



215:デフォルトの名無しさん
09/03/08 01:20:02
VistaはNTだし…

216:デフォルトの名無しさん
09/03/08 01:21:55
dwMajorVersionとdwMajorVersion見ろ

217:デフォルトの名無しさん
09/03/08 01:31:02
ドキュメントぐらい読め
URLリンク(msdn.microsoft.com)(VS.85).aspx

218:デフォルトの名無しさん
09/03/08 01:32:06
>>214
URLリンク(msdn.microsoft.com)(VS.85).aspx

219:デフォルトの名無しさん
09/03/08 01:32:58
かぶったorz

220:デフォルトの名無しさん
09/03/08 01:36:26
NT系列だったんですね 勘違いしてました。
ありがとうございました

221:デフォルトの名無しさん
09/03/08 01:38:07
まさか本気でMeの後継だと…

222:デフォルトの名無しさん
09/03/08 02:26:19
さらに、Windows 7.0はバージョン7.0と思っているに違いない。

223:デフォルトの名無しさん
09/03/08 02:49:04
え??VISTAの完成度の低さはMeの後継だからでしょ?

224:デフォルトの名無しさん
09/03/08 02:52:21
うん そうだね

225:デフォルトの名無しさん
09/03/08 02:56:45
Win32を使っているのならVistaのAPIの完成度の高さはわかるはずだが…

226:デフォルトの名無しさん
09/03/08 03:30:29
>>222
>Windows 7.0
もしかしてそれはWindows 7と言いたいのか?

227:デフォルトの名無しさん
09/03/08 03:31:53
>>223
「Meの後継」と「完成度」には何の関係もないだろ

228:デフォルトの名無しさん
09/03/08 06:03:34
>>226
そのとおり。すまん、つい勢いで書いてしまった。今は反省している。

229:デフォルトの名無しさん
09/03/08 06:35:58
>>227
そのとおり。すまん、つい勢いで書いてしまった。今は反省している。

230:デフォルトの名無しさん
09/03/08 10:37:52
VistaのAPIの完成度の高さ、って……

MS社員乙って言ってほしいのか?

231:デフォルトの名無しさん
09/03/08 12:15:03
後に出たAPIほど洗練されるのはある意味当たり前
VistaのAPIが完成度高いってよりWin32 APIが極端に使いにくいだけ
でも歴史的背景を考えればやむなし

232:デフォルトの名無しさん
09/03/08 13:40:29
はぁ?
VistaのAPIが完成度高い??洗練されてる??

もしかして、VistaのAPI=.NET3.0/WPF=洗練されてる、とか言いたいだけの人なのかね

233:デフォルトの名無しさん
09/03/08 13:45:09
WERやスレッド関連は以前よりはるかに完成度が高いと思うけど

234:デフォルトの名無しさん
09/03/08 13:49:43
>>233
アホは議論に参加しなくていいから。

235:デフォルトの名無しさん
09/03/08 13:54:28
一部流動的なものを対象としている為に、
ライブラリのような「完成度」が求めることが不可能
であるか極度に困難だからこそAPIと呼ばれライブラリ
とは呼ばれない件について
(以上チラ裏)

236:デフォルトの名無しさん
09/03/08 14:06:18
まあ APIの完成度 なんて表現を使う時点で程度の低さが分かっちゃうけどね

237:デフォルトの名無しさん
09/03/08 14:08:39
API=Aplication Programming Interface
だったっけ?
完成度は求められる対象じゃないか?

238:デフォルトの名無しさん
09/03/08 14:11:14
いやVISTAのAPIは完成度高いだろ
だってさ、XP用のソフトも使えるんだぜ?

XP = XP用のソフトしか使えない
VISTA = XP用ソフト、VISTA用ソフトの両方が使える

239:デフォルトの名無しさん
09/03/08 14:18:44
そもそもVistaのAPIつっても大部分がWin16時代からの物なのに「完成度」てw

どうも"API"を理解してない人がいるみたいだね
またいつもの人か?

240:デフォルトの名無しさん
09/03/08 14:20:03
どこぞのVZ厨だろ

241:デフォルトの名無しさん
09/03/08 14:21:46
>>239
そだね。APIってインターフェースだから内部構造は絶対不変で
Win16のコードすら必ず残ってるからね。だからVistaでもXPでも
Windows2.0のプログラムがそのまま動くw。

242:デフォルトの名無しさん
09/03/08 14:30:44
WERやスレッド関連って、VistaからのAPIだろ…

243:デフォルトの名無しさん
09/03/08 14:40:04
MSの互換性絶対主義の賜だね
さすがMS様はわかってらっしゃる

244:デフォルトの名無しさん
09/03/08 15:07:33
>>241
64bit版にはWin16サポート無くなってるんじゃなかったか?
古いInstallShieldのインストーラが起動しないとかどっかで見た気がする

245:デフォルトの名無しさん
09/03/08 15:23:24
まぁさすがにWin16はもういいだろ・・・

246:デフォルトの名無しさん
09/03/08 15:24:42
最近のソフトでも、インストーラーが16bitのがあるのがむかつく。
しかも64bit版でそんなインストーラ使うアホなとこもあるw

247:デフォルトの名無しさん
09/03/08 15:32:33
.NET Frameworkなんか糞だろ
開発する側のメリットしか考えてない使い手無視のAPI
互換性だけでWin32APIを残しているあたりも糞OS

248:デフォルトの名無しさん
09/03/08 15:43:59
PEの出だしって16bitじゃなかったか?

249:デフォルトの名無しさん
09/03/08 15:52:50
Windowsの灰色ってRGBで言うところの(255,255,255)いくつなんでしょうか?
SetTextColor(hdc, RGB(0, 0, 0);
SetBkColor(hdc、RGB(???));

背景はダイアログボックスの灰色です

これでいろいろ試してみたんですけど
なぜか背景色が合わないんです

どうしたらダイアログボックスと文字の背景色を合わせられるでしょうか?

250:デフォルトの名無しさん
09/03/08 15:53:29
PEは32/64bitだろ

因みに16bitはNEと呼ばれてた
LEとかLXとかっていう16/32bitハイブリッドなのもあってこれは9x時代のドライバにも使われてた

251:デフォルトの名無しさん
09/03/08 15:55:43
>>249
hbrBackground = (HBRUSH)(COLOR_BTNFACE + 1);

252:デフォルトの名無しさん
09/03/08 15:59:24
>>250
すまん
言い方が悪かった
OSが16bitだった場合実行される16bit命令が出だしにあったんじゃないかと

253:デフォルトの名無しさん
09/03/08 16:00:45
int型だぁ~(><;)わからないよ~

254:デフォルトの名無しさん
09/03/08 16:04:12
>>249
::SetTextColor( hDC, ::GetSysColor( COLOR_BTNTEXT));
::SetBkColor( hDC, ::GetSysColor( COLOR_3DFACE));

255:デフォルトの名無しさん
09/03/08 16:04:58
>>251さん
SetBkColor(hdc、COLORREF )
hbrBackground = (HBRUSH)(COLOR_BTNFACE + 1); を
COLORREF形式にするにはどうすればいいんでしょうか?

256:デフォルトの名無しさん
09/03/08 16:05:56
>>254
ありがとうございます
できましたm(_;)m

257:デフォルトの名無しさん
09/03/08 16:05:58
>>249
設定とかによって変わってくるから決めうちはいかんよ。

258:デフォルトの名無しさん
09/03/08 16:17:53
ほんと決め打ちは勘弁して欲しい
配色を黒基調にしてると文字が見えなくなるとかw

259:デフォルトの名無しさん
09/03/08 16:46:50
     __
     \|/
       |
   ┌─┼─?|─┬─┐
   三  |入    ,>   .└-、
   三  =    <、      ヽ、   ,-‐-、
   三 /.|      ,>   .┌-、 "''-( ( ̄〇
   └─┼──┴─┘ "''''""" ヽ,,,,ソ
     _|_
     ////

260:デフォルトの名無しさん
09/03/08 16:52:59
大抵SetBkMode(TRANSPARENT)するから
SetBkColor()はあんまり使わんかも

261:デフォルトの名無しさん
09/03/08 16:56:45
>>248
出だしつーかファイルの一番先頭は「このプログラムはDOSじゃ動かねーよ」って表示するだけの16bitコードだな。
極限までバイナリサイズ縮める遊びとかでたまに書き直してた。

262:デフォルトの名無しさん
09/03/08 17:00:21
>>261
ちゃんとしたプログラムに差し替えも可能だな。

263:デフォルトの名無しさん
09/03/08 17:31:27
誰ですか、スタブをjxw,exeにした人はw

264:デフォルトの名無しさん
09/03/08 20:49:27
VC++2005 でサウンド入出力プログラムを作っています.
SDK,低レベルAPIを使っています.
入力,出力共にマルチバッファリングを行っているのですが,
入力と再生の間に,バッファ数に従う遅延が生じてしまいます.
体感では,(1バッファに録音する秒数 * 用意したバッファ数)秒
の遅延が生じていると思われます.

リアルタイムに近い動作を実現したいため,
1バッファに録音する秒数(RecSEC)を短くしています.
現在の設定では RecSEC = 0.005 [sec/buffer] です.
バッファ数が少ないと音声がブツブツと途切れてしまいますが,
バッファ数を増やす事で解決しました.

これで遅延量が少ない動作が実現できたと思っていたのですが,
RecSEC = 0.1 として実行してみたところ,約0.1[sec]の遅延を期待していたのですが
約(0.1*バッファ数)[sec] という大きな遅延となってしまいました.

ソースコードをアップしましたので,解決方法をご教授願います.
waveInStart の実行位置を変えてみる等色々とやってみましたが
よくわかりませんでした.

pass: sagehoge
URLリンク(www2.uploda.org)

よろしくお願いします.

265:デフォルトの名無しさん
09/03/08 21:21:12
延滞が気になるASIOを使え

266:デフォルトの名無しさん
09/03/08 21:28:17
whOut[k].dwFlags = WHDR_BEGINLOOP | WHDR_ENDLOOP;
whOut[k].dwLoops = 1;

関係ないと思うけど↑が気になった
両方とも0でよくね?

267:デフォルトの名無しさん
09/03/08 21:44:58
>>264
Vista以降ならCoreAudioで扱えばいい。
他にもDirectSoundでバッファ読みまくりとか。

ソースは見るまでもないが、きっとやり方間違っているよ。
あらゆる方法を試した事のある俺が言うんだから間違いない。

268:264
09/03/08 21:50:58
>>265
ありがとうございます.
ですが,低レベルAPIで書きたいです.

>>266
ループ再生は不要なので,確かに両方とも0ですね.

>>267
XPで書いています.DirectXにも挑戦しようか悩みましたが,
低レベルAPIで片付けてみたいのです.
お暇な時にでもソースを見ていただけたら.

269:デフォルトの名無しさん
09/03/08 21:55:49
APIレベルではどうしようとも遅延が200~500msあるんだが、それを理解した上でやっているのか?

270:デフォルトの名無しさん
09/03/08 21:56:58
>>264
ここよりサウンドプログラムスレの方が良いアドバイスもらえるんじゃないか


271:264
09/03/08 22:07:46
>>269
数値がどの程度かは知りませんでしたが
それくらいの遅延は覚悟しておりました.
しかし現状ではアルゴリズムの問題で遅延が生じてしまっているため
それを解消したいのです.

>>270
スレ検索が足りなかったようです.
サウンドプログラミングのスレを見つけましたので,
そちらでお聞きする事にします.

皆さん,ありがとうございました.

272:デフォルトの名無しさん
09/03/09 04:20:37
>>231
互換性を切り捨てられるなら君の言うとおりだ。>後の方が洗練

273:デフォルトの名無しさん
09/03/09 05:32:19
互換性が切り捨てられるなら新しいOSが出る毎にコードを書き直さないといけないだろ
そんなのが洗練されてるとか、馬鹿?

274:デフォルトの名無しさん
09/03/09 07:24:18
↑話を分かっていないバカ

275:デフォルトの名無しさん
09/03/09 07:27:49
>>274 お前がな

276:デフォルトの名無しさん
09/03/09 07:34:07
>>274
荒らすなよ。

277:デフォルトの名無しさん
09/03/09 09:56:49
ここは荒らしていいスレじゃなかったっけ

278:デフォルトの名無しさん
09/03/09 10:33:57
落書きだらけの壁に「落書き禁止」の紙が貼ってあるようなもんだ。

279:デフォルトの名無しさん
09/03/09 12:42:44
荒らしていいスレ(笑)

280:デフォルトの名無しさん
09/03/09 18:31:20
>>278
「落書き禁止」なんて貼ってないよ
「自由の板です、どうぞ」の紙が貼られている板



281:デフォルトの名無しさん
09/03/09 21:40:56
以下のコードでnewでメモリ確保すると大丈夫なのにスタックにメモリ確保するとエラーになります。
どこがまずいのでしょうか?なんとなくスタックの概念を根本的に間違っているような気がします。
//----大丈夫----------------------------
#include<windows.h>
#include<gdiplus.h>
#pragma comment(lib,"Gdiplus.lib")
#include<cstdio>
void main()
{
Gdiplus::GdiplusStartupInput gdiplusStartupInput1;
ULONG_PTR gdiToken;
Gdiplus::GdiplusStartup(&gdiToken,&gdiplusStartupInput1,NULL);
Gdiplus::Bitmap*pBitmap1=new Gdiplus::Bitmap(TEXT("C:\\WINDOWS\\winnt.bmp"));
printf("%d\n",pBitmap1->GetWidth());
delete pBitmap1;
Gdiplus::GdiplusShutdown(gdiToken);
}
//----エラー----------------------------
#include<windows.h>
#include<gdiplus.h>
#pragma comment(lib,"Gdiplus.lib")
#include<cstdio>
void main()
{
Gdiplus::GdiplusStartupInput gdiplusStartupInput1;
ULONG_PTR gdiToken;
Gdiplus::GdiplusStartup(&gdiToken,&gdiplusStartupInput1,NULL);
Gdiplus::Bitmap bitmap1(TEXT("C:\\WINDOWS\\winnt.bmp"));
printf("%d\n",bitmap1.GetWidth());
Gdiplus::GdiplusShutdown(gdiToken);
}


282:デフォルトの名無しさん
09/03/09 21:45:43
>>281
使ってるクラスの内容は知らんが、
上だとビットマップ削除後Shutdown呼んでるが
下だとShutdown呼んだ後ビットマップ削除してる
辺りが原因なのでは?

283:デフォルトの名無しさん
09/03/09 21:46:53
スタックうんぬんというより、クラスのインスタンス生成の概念がわかってないんじゃない?

284:281
09/03/09 22:02:47
>>282
レスありがとうございます。
おっしゃるとおりでした。
main()を抜ける時にBitmapのデストラクタが実行されてすでに開放された領域を読もうとしていたようです。

>>282
レスありがとうございます。
クラスのインスタンス生成の概念がわかってないっぽいです。

自分のやり方だと確保する領域が固定だと
Gdiplus::Bitmap bitmap1(TEXT("C:\\WINDOWS\\winnt.bmp"));
という風にスタックに確保するのですが、

他の人は
Gdiplus::Bitmap*pBitmap1=new Gdiplus::Bitmap(TEXT("C:\\WINDOWS\\winnt.bmp"));
という風に確保する領域が固定でもnewで確保しているようです。
なぜそうするかは理解できません。


285:デフォルトの名無しさん
09/03/09 22:07:53
newを使いたくないなら無理やり↓みたいにスコープ作ればよいのでは。
{
 Gdiplus::Bitmap bitmap1(TEXT("C:\\WINDOWS\\winnt.bmp"));
 printf("%d\n",bitmap1.GetWidth());
}

286:281
09/03/09 22:22:46
>>285
レスありがとうございます。
デストラクタのタイミングを制御する必要がある時意外でも、
たとえば、デストラクタのタイミングを制御する必要がなく、いっけんnewを使う必要が無いような時も

自分のやり方だと
Gdiplus::Graphics graphics1(hdc1);
という風にスタックに確保する場面で

他の人は
Gdiplus::Graphics*pGraphics1=new Gdiplus::Graphics(hdc1);
という風にnewで確保しているようです。
この理由がわかりません。

287:デフォルトの名無しさん
09/03/09 22:53:01
>>286
クラスのインスタンスでも、基本的には変数と同じ使用方法でいいと思うけどね。
#関数内でのみの使用、永続的な使用等で切り分け

わざとnewで確保するのは、明示的にdeleteを呼ぶことでそこでデストラクタが
実行されることを示したいからじゃない?

ま、別にこだわる必要はなし。
下手にnewばかりしてメモリリークさせるなら>>281の方が合理的なのは確か。

288:デフォルトの名無しさん
09/03/09 22:59:10
コンストラクタでGdiplusStartup呼んで、デストラクタでGdiplusShutdown呼ぶクラス一個つくって
mainの頭に置こうぜ

289:デフォルトの名無しさん
09/03/09 23:02:40
>>286
サイズがデカいクラスをスタックにとりたくない場合はnewする場合はある。
Gdiplusがそこまでデカいかは知らんが。

290:デフォルトの名無しさん
09/03/09 23:04:02
> Gdiplusがそこまでデカいかは知らんが。

実装依存

291:デフォルトの名無しさん
09/03/09 23:09:29
Gdiplusの実装とか

292:デフォルトの名無しさん
09/03/09 23:14:07
>>281のエラーの出るコードをコンパイル実行するとメモリリーク発生だな
何でだろ?

293:デフォルトの名無しさん
09/03/09 23:15:15
>>289
言われてみれば、他作クラスはサイズが分からんから
念のためにヒープの方がいいかもな

294:デフォルトの名無しさん
09/03/09 23:19:49
readprocessmemory関数を使いたくてVB2005ExpressEditionでプログラムを組んでみたのですが、
エラーが出て動きません。なぜでしょうか??いろいろググってみたけどわかりませんでした。
やりたいことは単にプロセスのメモリを読みたいだけなんですが・・・

「AccessViolationExceptionはハンドルされませんでした。
保護されているメモリに読み取りまたは書込み操作を行おうとしました。他のメモリ
が壊れていることが考えられます。」

Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hWnd As Long, ByRef lpdwProcessId As Long) As Long
Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpszClassName As String, ByVal lpszWindowName As String) As Long

Dim hProc As Long
Dim PID As Long
Dim threadid As Long
hProc = FindWindow("Notepad", vbNullString)
threadid = GetWindowThreadProcessId(hProc, PID) ←ここの処理でエラーになる

295:デフォルトの名無しさん
09/03/09 23:23:00
>>292
すでに>>285が答えてるだろ
bitmap1が関数の終わりで解放処理を行おうとするが
その時にはGdiplusShutdownでgdiplusの環境が破棄されてるから正常に終了できない
だからローカル変数のスコープを{}で狭い範囲に閉じ込めなければならない

296:デフォルトの名無しさん
09/03/09 23:25:43
>>294
大幅に間違ってる。とりあえず、リファレンスを見直せ。

297:デフォルトの名無しさん
09/03/09 23:26:33
HWND な変数に hProc なんて名前を付けるのはやめれ・・・

298:デフォルトの名無しさん
09/03/09 23:41:32
>>295
すまん、>>282がそのものずばりのこといってるんだな、俺、ダメポ
デストラクタが呼ばれる前にShutdownすれば、当然、メモリリーク出るわな
Gdiplus::GdiplusShutdown(gdiToken); でShutdownさているのに
プログラム終了時にGdiplus::Bitmap bitmap1のデストラクタ呼ぶんだからな



299:281
09/03/09 23:48:25
>>287
>>わざとnewで確保するのは、明示的にdeleteを呼ぶことでそこでデストラクタが
>>実行されることを示したいからじゃない?
僕もそう思います。

>>288
それもいい方法だと思います。

>>289
newを使う理由が1つわかりました。ありがとうございます。

>>290
とりあえずスタックが壊れるほど大きくはなさそうです。

>>292,298
僕も282さんに聞くまで気付きませんでした。

>>293
慎重にやるならそれもいい方法ですね。

>>295
追加説明ありがとうございます。

300:デフォルトの名無しさん
09/03/10 00:01:49
>>293
他作クラスであってもスタック上に確保できるならサイズは調べられるだろ。
そうでないとそもそもコンパイル不能だ。

まあ、将来的に変更される可能性はあるが。

ちなみに手元の環境だとsizeof(Bitmap)は16で画像の実態は内部で保有してるポインタの先にある。

301:デフォルトの名無しさん
09/03/10 00:10:50
他人が作ったライブラリの初期化と後始末を同じ関数内でやるのは細心の注意がいるね

302:デフォルトの名無しさん
09/03/10 00:11:28
>>300
更に言われてみれば、まともなメーカーが提供してるクラスだと
確かに馬鹿でかいクラスのオブジェクトをスタックに積む、なんて
アホなクラスなんぞ無いはずだよな。。。

>コンパイル不能
StackOverflowってコンパイル時に分かるものだったっけ?

303:デフォルトの名無しさん
09/03/10 00:16:13
スタックにばかでかい配列取ろうとしたときは怒られるな

304:デフォルトの名無しさん
09/03/10 00:26:58
>>303
thx
警告レベルが低いせいかあまり見た記憶が無いな
今度試してみよう

305:デフォルトの名無しさん
09/03/10 10:06:06
>>280

>>276

306:デフォルトの名無しさん
09/03/10 10:14:17
ここは荒らしていいスレじゃなかったっけ

307:デフォルトの名無しさん
09/03/10 13:11:43
OSではなくソフトウェアから、パフォーマンス オプションの「パフォーマンスを優先する」に設定することは可能でしょうか?そのようなAPIをご存知の方いますでしょうか?

308:デフォルトの名無しさん
09/03/10 13:25:29
OSもソフトウエア

309:デフォルトの名無しさん
09/03/10 13:30:44
>>307
そういうAPIがあるかどうかは知らんが、力技でいくなら、レジストリ書き換えて WM_SETTINGCHANGE を発行すれば?

310:デフォルトの名無しさん
09/03/10 13:30:46
>>308
知らないならレスするなクズ

311:デフォルトの名無しさん
09/03/10 13:32:23
G(S)etPriorityClass

312:デフォルトの名無しさん
09/03/10 13:45:49
HKLM\SYSTEM\CurrentControlSet\Control\PriorityControl\Win32PrioritySeparation
をレジストリAPIで適切な値に書き換えて再起動。

313:307
09/03/10 13:54:40
ありがとうございます。レジストリ強制書き換えなら可能なのですね。APIでG(S)etPriorityClassでもできるのでしょうか?

314:デフォルトの名無しさん
09/03/10 13:59:41
システムの動作に関わるレジストリを勝手に書き換えるソフトか

ウィルス並だな

315:デフォルトの名無しさん
09/03/10 14:03:32
>>314
お前みたいなクズはウィルスよりたちが悪いぜ。

316:デフォルトの名無しさん
09/03/10 14:17:00
>>315
知らないならレスするなクズ

317:デフォルトの名無しさん
09/03/10 22:48:00
WSHはCOMですか?

318:デフォルトの名無しさん
09/03/10 22:49:54
>>317
はい。API ではないのでスレ違いだと思われます。

319:デフォルトの名無しさん
09/03/10 23:17:54
ActiveScriptはぎりぎりこのスレの範疇にできるだろうけど、
WSHは外れていると思う。

320:デフォルトの名無しさん
09/03/11 02:09:42
ウィンドウのクライアント領域をドラッグしてウィンドウの位置を移動させたいんですが、ちょっとうまくいかないので質問。
WM_MOUSEMOVEでマウスボタンが押されていたらドラッグとみなし、SetWindowPosで前回位置との差分分移動としています。
しかし、これだとマウスが動くと同時にウィンドウがガタガタと元の位置辺りとマウス位置あたりに行ったり来たり
を繰り返してしまって、とても汚いです。どういう風にやるとタイトルバーをドラッグした時のように綺麗に動くのでしょうか?
ちなみにマウスの座標はクライアントでもスクリーンでもダメでした。

321:デフォルトの名無しさん
09/03/11 02:20:15
WM_NCHITTESTでHTCAPTION返せ

322:デフォルトの名無しさん
09/03/11 06:28:31
>>320
いい加減に書くとそうなる
(移動した時にWM_MOUSEMOVEが発生するので、WM_MOUSEMOVE→移動→WM_MOUSEMOVE→・・・を繰り返してしまう)

323:デフォルトの名無しさん
09/03/11 07:45:14
WM_LBUTTONDOWNでフラグ立てて、WM_LBUTTONUPで落とすような
処理が必要じゃないの?

324:デフォルトの名無しさん
09/03/11 09:00:29
知らない人はレスしなくていいです。

325:デフォルトの名無しさん
09/03/11 09:25:56
前回位置との差分じゃなくてWM_LBUTTONDOWNが来た時のカーソル座標と現在のカーソル座標との差分を使うんだよ。
ていうかこんなのググればサンプルがすぐ見つかるんだから深夜に糞スレで質問するぐらいなら自分で探しなよ。

326:デフォルトの名無しさん
09/03/11 10:04:15
つーか>>321で一発なのにな

327:デフォルトの名無しさん
09/03/11 10:24:15
>>325
そんなアホな処理しなくても>>321でおk

328:デフォルトの名無しさん
09/03/11 10:50:14
むしろ>>321でいいのにな

329:デフォルトの名無しさん
09/03/11 10:51:07
むしろ>>321でいいのにな

330:デフォルトの名無しさん
09/03/11 12:02:18
>>321でいいとかマジで言ってるならアホすぎ

331:デフォルトの名無しさん
09/03/11 12:27:19
case WM_LBUTTONDOWN:
::PostMessage( hWnd, WM_NCLBUTTONDOWN, HTCAPTION,i lParam);
break;

332:デフォルトの名無しさん
09/03/11 12:42:23
タイトルバー以外の部分をドラッグしてウィンドウを移動させる
URLリンク(hp.vector.co.jp)

333:デフォルトの名無しさん
09/03/11 14:08:28
>>331
コンパイルエラーだろバカ

334:デフォルトの名無しさん
09/03/11 14:28:31
#define i

335:デフォルトの名無しさん
09/03/11 14:33:24
333 はおそらく実際にコンパイルしてみたに違いないw

336:デフォルトの名無しさん
09/03/11 14:36:08
そんなもんコンパイルしなくても見ればわかるだろ JK

337:デフォルトの名無しさん
09/03/11 14:41:37
つーかこんな所に貼られたコードを安易にコンパイルして実行する奴なんて居るのか?
得体の知れないファイルを平気でクリックして実行するレベルだろ

338:デフォルトの名無しさん
09/03/11 14:44:38
>>337
このスレに貼られたコードの意味が分からない奴なんて居るのか?

339:デフォルトの名無しさん
09/03/11 14:47:51
>>338
居るよ
>>337とか


340:デフォルトの名無しさん
09/03/11 15:02:01
むしろこのスレに貼られたコードの意味が分かる奴なんて居るのか?

341:デフォルトの名無しさん
09/03/11 15:04:27
>>340
いるよ
>>339とか

342:339
09/03/11 15:07:17
いや俺は.netしか使ったことないから分かってないよw


343:デフォルトの名無しさん
09/03/11 15:07:39
NCHITTESTだと、どのボタンが押されたかとか、自作ライブラリとの親和性が低いとかあるので
>>325の方法で大方解決しました。ありがとうございました。

ところでGDI+の半透明描画や画像の回転機能を自分で作りたいんですが、あのライブラリは
ハードの機能を使ったりしているんでしょうか?自分でちまちまピクセルごとの計算をしたら
とてもゲームに使えるようなスピードにならない気もするんですが・・・

344:デフォルトの名無しさん
09/03/11 15:28:34
やってみたのか

345:デフォルトの名無しさん
09/03/11 15:31:31
やってみたのだ

346:デフォルトの名無しさん
09/03/11 15:39:54
これでいいのだ

347:デフォルトの名無しさん
09/03/11 16:11:23
まだやってないです
やるとしたら、描画命令来るたびにロックするとかかな

348:デフォルトの名無しさん
09/03/11 17:22:55
>>343
GDI+はソフトウェア描画だよ。

349:デフォルトの名無しさん
09/03/11 17:34:05
>>330
何がアホなのか言ってみな

350:デフォルトの名無しさん
09/03/11 18:17:52
>>348
ソフトウェア処理だけど一応MMX/SSEなどは使ってるみたい

まあゲームで使える速度じゃないのは言うまでも無いけど

351:デフォルトの名無しさん
09/03/11 19:34:55
          ____   
       / \  /\ キリッ
.     / (ー)  (ー)\      
    /   ⌒(__人__)⌒ \    < 何がアホなのか言ってみな
    |      |r┬-|    |      
     \     `ー'´   /      
    ノ            \
  /´               ヽ              
 |    l              \
 ヽ    -一''''''"~~``'ー--、   -一'''''''ー-、.    
  ヽ ____(⌒)(⌒)⌒) )  (⌒_(⌒)⌒)⌒))
          ____
        /_ノ  ヽ、_\
 ミ ミ ミ  o゚((●)) ((●))゚o      ミ ミ ミ
/⌒)⌒)⌒. ::::::⌒(__人__)⌒:::\   /⌒)⌒)⌒)
| / / /     |r┬-|    | (⌒)/ / / //  だっておwwwwwww
| :::::::::::(⌒)    | |  |   /  ゝ  :::::::::::/
|     ノ     | |  |   \  /  )  /
ヽ    /     `ー'´      ヽ /    /     バ
 |    |   l||l 从人 l||l      l||l 从人 l||l  バ   ン
 ヽ    -一''''''"~~``'ー--、   -一'''''''ー-、    ン
  ヽ ____(⌒)(⌒)⌒) )  (⌒_(⌒)⌒)⌒))

352:デフォルトの名無しさん
09/03/11 19:37:31
ほらな
答えられない

353:デフォルトの名無しさん
09/03/11 20:04:05
>>348ぐぐ そうですか
バリバリフレームレート出まくってるゲームで描画が5割以上GDI+みたいなゲームってありますか?
GDI+入れて組むのめんどくてどんなもんなのかよくわからんのです。知ってる人いたらラッキーなんで教えてくださいよ先輩

354:デフォルトの名無しさん
09/03/11 20:09:51
>>353
妄想レスだがフレームレート上げたいゲームならDirectXを普通に使うんじゃない?


355:デフォルトの名無しさん
09/03/11 20:34:18
[環境]非MFCでWin32API(VC2005でC++)です。
[質問]画面に入りきらないテキストを描画して、スクロールしたら、
   上の方の文章を消して、下の方の文章を表示するプログラムが組めません。
[どこまでできたの?]
DrawText作ってテキストを表示。
スクロールするだけのWindow。

スクロールした値は取れるので、それをDrawTextに反映させたいのですが、
どうやればいいでしょうか?

356:デフォルトの名無しさん
09/03/11 20:35:58
素直にエディットコントロール使うんじゃだめなのか…

357:デフォルトの名無しさん
09/03/11 20:48:00
>>356 レスサンクス。
もっと、初期の段階だったらそれも考えれるのですが、、、ここの部分組んだらプログラム完成するんです、、、。

DrawTextの第4引数のRECT構造体の値があるんですが、
これって、マイナスの値入れるのは危険ですか?

RECT rc;
GetClientRect( hWnd, &rc );
rc.top -= 100;

358:デフォルトの名無しさん
09/03/11 20:48:54
GDI+の用途って画像ファイルの入出力とアンチエイリアスつきのベクタ描画ぐらいじゃね

359:デフォルトの名無しさん
09/03/11 21:01:11
>>357
問題はない。

360:357
09/03/11 21:04:13
>>359 レスありがとん。
それを聞いて安心しました。
あとは、テキストのたての長さを割り出す作業だけでいけそうです。
ありがとうございました。

361:デフォルトの名無しさん
09/03/11 21:48:35
メモリDCに最初から全部描いておいて、スクロールの都度、必要な部分だけBitBltする手もあるぞ

362:デフォルトの名無しさん
09/03/11 21:58:41
早く数学を教えてください。
待て待て

363:デフォルトの名無しさん
09/03/11 22:49:25
>>354それもそうですね。
>>358GDIだけだと結構やりたいこと出来ないんですよ・・・

364:デフォルトの名無しさん
09/03/11 23:24:54
CloseHandleの戻り値って確認してる?
正しいハンドルを渡してもエラーになる場合ってどんなとき?

365:デフォルトの名無しさん
09/03/11 23:27:49
::GetLastError()

366:デフォルトの名無しさん
09/03/11 23:38:41
>>351
アホ乙w

367:デフォルトの名無しさん
09/03/12 00:15:36
>>364
通信系だと、通信不良とか?

368:デフォルトの名無しさん
09/03/12 00:49:05
プロパティシートで
psp.lParam=(LPARAM)Data; とlParamに構造体 DATAを設定しているのですが、
受取先の、Windowでは死んでいます。うまく受け渡しが
できません。
psp.pszTemplate = "IDD_D";
psp.pfnDlgProc = (DLGPROC)Function0;
psp.lParam=(LPARAM)Data;

hpsp[0] = CreatePropertySheetPage(&psp);



memset(&psh, 0, sizeof(PROPSHEETHEADER));
psh.dwSize = sizeof(PROPSHEETHEADER);
psh.dwFlags = PSH_NOAPPLYNOW;
psh.hInstance = hInst;
psh.hwndParent = hDlg;
psh.nPages = 1;
psh.phpage = hpsp;
psh.pszCaption = "設定";
(HWND)PropertySheet(&psh);
うまく受け渡すにはどうしたらいいでしょうか

369:デフォルトの名無しさん
09/03/12 01:00:26
Dataの型は DATA か DATA* か? 前者なら間違い

370:デフォルトの名無しさん
09/03/12 01:01:18
肝心の受け取り部分が書いてないが
((PROPSHEETPAGE*)lParam)->lParamにしてるか?

371:デフォルトの名無しさん
09/03/12 01:57:57
>>364
ディクス書き込みで、フラッシュ時に IO エラーが発生するとか、
ディスクフルになるとか。

372:デフォルトの名無しさん
09/03/12 08:34:59
>>371
ファイル書き込みは遅延書き込みありでキャッシュされているから、
CloseHandle()の戻り値では、アプリケーションからディスクI/O時の
エラーは検出されないと思う。イベントログに上がるだけでは?

キャッシュを書き戻す処理に関係なく、キャッシュとディスク上の配置は
マップ管理されていると思うので、ディスクフルはWriteFile()の戻り値で
エラーが返されるはず。

当然だが、オープンされていない間違ったハンドルを渡せばエラーが返る。

373:デフォルトの名無しさん
09/03/12 12:26:27
          ____
        /_ノ  ヽ、_\
 ミ ミ ミ  o゚((●)) ((●))゚o      ミ ミ ミ
/⌒)⌒)⌒. ::::::⌒(__人__)⌒:::\   /⌒)⌒)⌒)
| / / /     |r┬-|    | (⌒)/ / / //  >>366 そんなこと言うなよ。仲間だろ?wwwwwww
| :::::::::::(⌒)    | |  |   /  ゝ  :::::::::::/
|     ノ     | |  |   \  /  )  /
ヽ    /     `ー'´      ヽ /    /     バ
 |    |   l||l 从人 l||l      l||l 从人 l||l  バ   ン
 ヽ    -一''''''"~~``'ー--、   -一'''''''ー-、    ン
  ヽ ____(⌒)(⌒)⌒) )  (⌒_(⌒)⌒)⌒))

374:デフォルトの名無しさん
09/03/12 18:11:18
ボタンの描画についての質問です。
グループボックスや、ラジオボタンが描画されるとき、文字列描画部分の背景色を透過することはできないでしょうか。

MSDNを読むとWM_CTLCOLORBTNはオーナードローのボタンでないと、意味が無いということで (実際無理でした)
サブクラス化をして、WM_ERASEBKGNDを捕まえて何も処理せずにreturnしたり、
GetClassInfoEx → styleメンバに CS_OWNDC を OR演算 → 新しいクラス登録、その後 WM_CREATE でSetBkMode(hdc,TRANSPARENT)を試してみたりしましたが、どちらもできませんでした。
ボタンの描画自体はデフォルトの処理を任せたいのですが、何か方法はないでしょうか。

375:デフォルトの名無しさん
09/03/12 18:16:18
WS_EX_TRANSPARENTを指定してWM_CTLCOLOR~でNULLブラシを返せば?

376:デフォルトの名無しさん
09/03/12 18:30:15
>>375
レス有難う御座います。
試してみましたが、変化が現れませんでした。

377:デフォルトの名無しさん
09/03/12 18:32:15
WM_CTLCOLORBTN or WM_CTLCLORSTATIC にて

SetBakMode( hDC, TRANSPARENT);
return (HBRUSH)GetStockObject( NULL_BRUSH);

378:デフォルトの名無しさん
09/03/12 18:50:07
>>377
コンパイルエラーだろバカ

379:デフォルトの名無しさん
09/03/12 18:56:37
STATICコントロールは WM_...STATIC で透過させることが出来ますが、
BUTTONコントロールはどうもうまくいかないみたいです・・・。
素直に諦めることにします。

380:デフォルトの名無しさん
09/03/12 19:03:33
普通に可能なんだが・・・

ああ馬鹿なのね

381:デフォルトの名無しさん
09/03/12 19:21:27
面倒だから煽らなくていいです

382:デフォルトの名無しさん
09/03/12 19:57:00
>>380はわかってない馬鹿とみた

383:デフォルトの名無しさん
09/03/12 20:03:24
>>382
ん?悔しかったの?www

384:デフォルトの名無しさん
09/03/12 20:07:28
ラジオボタンやグループボックスの背景なら>>375>>377が書いてる方法で透過するだろ。
前にそういうコード書いたことあるし。

385:デフォルトの名無しさん
09/03/12 20:46:16
>>384
新しくプロジェクトを始めて、ダイアログベースではないウィンドウ上で試してみたら、成功しました。
リソースから作ったダイアログ上のタブコントロールの上にこれらのBUTTONコントロールを配置した時に、見栄えが悪かったため
最初の質問をさせていただきましたが、グループボックスをリソースからではなく、
WM_INITDIALOG内にて、親ウィンドウをタブコントロールとして生成したところ、やりたかったことを実現することが出来ました。
レスしてくれた方々、有難う御座いました。



386:デフォルトの名無しさん
09/03/12 20:58:08
>最初の質問をさせていただきましたが、グループボックスをリソースからではなく、

まさか コントロールIDが IDC_STATIC のままだったとかいうオチじゃないだろうな。

387:デフォルトの名無しさん
09/03/12 21:01:56
いや、IDは数字を直指定しているのでそれはないです。

388:デフォルトの名無しさん
09/03/12 21:38:45
>>382が分かってない馬鹿でした

389:デフォルトの名無しさん
09/03/12 22:44:12
ブラウザでページを開いて、
今どの入力項目にカーソルがあたっているかを調べる方法ってありますか?

390:デフォルトの名無しさん
09/03/13 07:10:04
>>389
ブラウザまで自作すれば出来るんじゃね

391:デフォルトの名無しさん
09/03/13 07:13:03
>>390
俺もわかんねけどDOM構造調べてカーソルチェックするしかないんじゃね?

392:デフォルトの名無しさん
09/03/13 07:17:26
IEで、現在選択されている文字列をクリップボードにコピーさせる操作を、
別プロセスから行うのはAPIで可能ですか?

393:デフォルトの名無しさん
09/03/13 07:23:50
>>392
SendMessage()でいいんじゃね?
激しくメンドクサイが・・・

394:デフォルトの名無しさん
09/03/13 08:18:47
>>391
なるほど
ところでそのカーソルのチェックってどうやったらできますか?


395:デフォルトの名無しさん
09/03/13 08:22:31
>>394
気持は分かるがそこまでだ。DOMはWin32じゃない。
その辺のHTMLか言語スレでやってくれ。

396:デフォルトの名無しさん
09/03/13 10:47:02
Windowを列挙して座標から該当するWindow(コントロール)を探す。
その名前とHTMLを照合する・・ってぐらいしか思いつかないな。

397:デフォルトの名無しさん
09/03/13 11:03:27
アドウェアの開発を手伝ってやることはないと思うんだ

398:デフォルトの名無しさん
09/03/13 11:09:24
どちらかというとカード番号とかIDを奪うスパイウェアっぽい

399:デフォルトの名無しさん
09/03/13 11:28:01
フォームに自動入力するのは作ったことある
フォームに入ってるデータも隠しを含めて全部読めたけど
カーソル位置なんか考えないな

400:デフォルトの名無しさん
09/03/13 11:33:52
>>396
バカ、IEはウィンドウレスだからコントロールは無いよ

401:デフォルトの名無しさん
09/03/13 11:35:45
>>400

402:デフォルトの名無しさん
09/03/13 11:45:50
このスレウザイのが張り付いてるな
自分の仕事と思ってるのか知らんが一番迷惑
面白いレスしようと思ってワクワクしてこのスレ開いてんのかな?
一番寒いのに

403:デフォルトの名無しさん
09/03/13 12:17:13
>>402
君が一番寒いよ

404:デフォルトの名無しさん
09/03/13 12:18:14
>>403
そして君が二番目

405:デフォルトの名無しさん
09/03/13 12:30:51
>>402
知らないならレスしないで下さい。寒いだけです。

406:デフォルトの名無しさん
09/03/13 12:37:34
さぶ

407:デフォルトの名無しさん
09/03/13 13:28:35
>>402
知識の還元してるんでしょ?喜ぶことで煽ることではないと思うが
ただし、的を射る場合に限るw

408:デフォルトの名無しさん
09/03/13 13:37:59
>>407
寒い自己レス乙

409:デフォルトの名無しさん
09/03/13 13:41:40
おいおい、せめて引きこもりピザは2chで役に立てwww

410:デフォルトの名無しさん
09/03/13 13:45:26
>>409
自己紹介乙

411:デフォルトの名無しさん
09/03/13 13:49:21
>>410
自作自演乙

412:デフォルトの名無しさん
09/03/13 13:53:53
>>411
寒い自己レス乙

413:デフォルトの名無しさん
09/03/13 14:28:32
あるプロセスが走っているか調べるAPIはありますでしょうか?
具体的にはタスクマネージャーが動いているか知りたいです。

414:デフォルトの名無しさん
09/03/13 14:30:58
>>413
スパイウェアですか?

415:デフォルトの名無しさん
09/03/13 14:31:27
>>413
EnumWindowsでタスクマネージャWindowを探すのどうよ?

416:413
09/03/13 14:32:21
ちがいます。

417:413
09/03/13 14:35:09
正解です。

418:413
09/03/13 14:35:48
>>415
ありがとうございます。試してみます。

419:デフォルトの名無しさん
09/03/13 14:38:44
ちんちんが大きくなるのですがどうしたらいいですか?

420:デフォルトの名無しさん
09/03/13 14:43:41
>>389=>>413

タスクマネージャからプロセス隠蔽してブラウザで入力した個人情報を盗むスパイウェアを作ってるんですね
次はrootkitの作り方を質問してくるのかな

421:デフォルトの名無しさん
09/03/13 15:00:12
何でこのスレは直ぐにスパイウェアだとか、そんな悪い方向に持ってくの?

422:デフォルトの名無しさん
09/03/13 15:04:06
あとはpsapiとかかね

423:デフォルトの名無しさん
09/03/13 15:04:44
悪い方向のソフトを作る目的で質問する馬鹿がいるから。

424:デフォルトの名無しさん
09/03/13 15:05:56
psapiってプラットだったっけ?
昔めんどくさくてフリーのEXE拾ってきた覚えたあったなぁ

425:デフォルトの名無しさん
09/03/13 15:09:16
>>413
結局ナニ作るの?そろそろ教えてくれないよこれ。

426:デフォルトの名無しさん
09/03/13 15:11:35
日本語でおk

427:デフォルトの名無しさん
09/03/13 15:13:19
タスクマネージャーを監視する目覚ましと時計(MP3ネットラジオ付)です。

428:デフォルトの名無しさん
09/03/13 15:16:32
まだ目覚まし粘着君いたんだw
すげーしつこいw

429:デフォルトの名無しさん
09/03/13 15:16:45
やばいwww天才発見www
その発想は無かったわwwwwwwwwwwwwwwwwwwwwwww

出来ればなぜにタスクマネージャー見るのか教えて。
煽りではなく、後学のために。どんな用途に使えるの?

430:デフォルトの名無しさん
09/03/13 15:21:49
>>429
お前には関係ないですよ。

431:デフォルトの名無しさん
09/03/13 15:30:31
   / ̄ ̄\
 /   _ノ  \
 |   ( ●)(●)
. |     (__人__)____
  |     ` ⌒/ ─' 'ー\
.  |       /( ○)  (○)\
.  ヽ     /  ⌒(n_人__)⌒ \  >>429
   ヽ   |、    (  ヨ    |
   /    `ー─-  厂   /
   |   、 _   __,,/     \

432:デフォルトの名無しさん
09/03/13 15:31:51
>>429

433:デフォルトの名無しさん
09/03/13 16:05:03
>>429あげ

434:デフォルトの名無しさん
09/03/13 16:07:08
>>429の母です。

435:デフォルトの名無しさん
09/03/13 16:13:00
>>429の娘です。

436:デフォルトの名無しさん
09/03/13 17:32:18
>>429のコーン入りうんこです。

437:デフォルトの名無しさん
09/03/13 18:27:27
>>429
タスクマネージャ監視の使い道を考えてみた。

裏でゴリゴリ悪いことしてるプログラムが、タスクマネージャでCPU使用率を見られて
マークされないように、タスクマネージャが起動している間は大人しくする。

438:デフォルトの名無しさん
09/03/13 19:09:47
>>437
そんな面倒な事しなくても適宜Sleep(n)でも入れて休ませとけばいいだろ

タスクマネージャを騙すっていえば定期的にSetProcessWorkingSetSizeを呼んでメモリ使用量を少なく見せるとか有名だな

439:デフォルトの名無しさん
09/03/13 19:18:45
午後キチ、今日は楽しかったろ

440:デフォルトの名無しさん
09/03/13 19:19:04
>>419
結局ナニ作るの?そろそろ教えてくれないよこれ。

441:デフォルトの名無しさん
09/03/13 20:12:34
チャットなら外でやれ

442:デフォルトの名無しさん
09/03/13 20:32:17
     カタカタ
  || ̄ Λ_Λ
  ||_(Д`; ) 「なに?このスレ・・・」
  \⊂´   )
    (  ┳'

443:デフォルトの名無しさん
09/03/13 21:13:07
>>442
そういうのイラネ

444:デフォルトの名無しさん
09/03/13 21:21:54
>>443
そういうのイラネ

445:デフォルトの名無しさん
09/03/13 23:48:48
soine

446:デフォルトの名無しさん
09/03/14 09:16:01
Win32APIで、MessageBoxみたいに一発呼び出しで
1行テキスト入力だけして入力した文字列を返すようなダイアログを出すAPIってないもんでしょうか?

447:デフォルトの名無しさん
09/03/14 09:20:20
ないもんです

448:デフォルトの名無しさん
09/03/14 09:35:05
EntryDialog

449:デフォルトの名無しさん
09/03/14 09:46:56
URLリンク(www.gamedev.net)
#include <windows.h>
#include <string>
#ifdef UNICODE
typedef std::wstring InputBoxStringType;
typedef LPWSTR InputBoxCharPointerType;
typedef wchar_t InputBoxCharType;
#define InputBoxString(x) L##x
#else
typedef std::string InputBoxStringType;
typedef LPSTR InputBoxCharPointerType;
typedef char InputBoxCharType;
#define InputBoxString(x) x
#endif


450:デフォルトの名無しさん
09/03/14 09:48:50
LRESULT CALLBACK InputBoxWndProc(HWND WndHandle, UINT Message, WPARAM wParam, LPARAM lParam){
static InputBoxStringType *Results = 0;
static HWND InputLabelHandle = 0;
static HWND InputHandle = 0;
switch(Message){
case WM_NCCREATE:{Results = (InputBoxStringType*)((CREATESTRUCT*)lParam)->lpCreateParams;break;}
case WM_CLOSE:case WM_DESTROY:{PostQuitMessage(0);break;}
case WM_COMMAND:{
int NotifyCode = HIWORD(wParam);
int ControlId = LOWORD(wParam);
HWND ControlHandle = (HWND)lParam;
switch(ControlId){
case 1001:{InputHandle = ControlHandle;break;}
case 1002:{if(InputHandle == 0 || !Results){PostQuitMessage(0);break;}
InputBoxCharPointerType Buffer = new InputBoxCharType[256];
GetWindowText(InputHandle, Buffer, 256);
*Results = Buffer;PostQuitMessage(0);break;}
case 1003:{if(InputHandle == 0 || !Results){PostQuitMessage(0);break;}
*Results = InputBoxString("");PostQuitMessage(0);break;}
}break;}
}
return DefWindowProc(WndHandle, Message, wParam, lParam);
}

451:デフォルトの名無しさん
09/03/14 10:17:38
static InputBoxStringType ShowInputBox(HWND OwnerWindowHandle, const InputBoxStringType &InputLabel, const InputBoxStringType &InputText, const InputBoxStringType &Title){
WNDCLASS WndClass;
HWND DialogHandle = 0;
HWND InputLabelHandle = 0;
HWND InputHandle = 0;
HWND OkButtonHandle = 0, CancelButtonHandle = 0;
InputBoxStringType Result = InputBoxString("");
ZeroMemory(&WndClass, sizeof(WNDCLASS));
WndClass.hbrBackground = GetSysColorBrush(COLOR_3DFACE);
WndClass.hIcon = LoadIcon(0, IDI_APPLICATION);
WndClass.hCursor = LoadCursor(0, IDC_ARROW);
WndClass.hInstance = GetModuleHandle(0);
WndClass.lpszClassName = InputBoxString("InputBox");
WndClass.lpfnWndProc = InputBoxWndProc;
RegisterClass(&WndClass);
int X = 0, Y = 0;
int Width = 0, Height = 0;
RECT TempRect;
GetWindowRect(GetDesktopWindow(), &TempRect);
Width = (int)((float)(TempRect.right - TempRect.left) * 0.25f);
Height = 150;
X = ((TempRect.right - TempRect.left) / 2) - (Width / 2);
Y = ((TempRect.bottom - TempRect.top) / 2) - (Height / 2);

452:デフォルトの名無しさん
09/03/14 10:18:25
DialogHandle = CreateWindowEx(0, InputBoxString("InputBox"), Title.c_str(), WS_OVERLAPPEDWINDOW | WS_VISIBLE, X, Y, Width, Height, OwnerWindowHandle, 0, GetModuleHandle(0), (LPVOID)&Result);
int LabelX = 5, LabelY = 5;
int LabelWidth = Width - 10, LabelHeight = 24;
InputLabelHandle = CreateWindowEx(0, InputBoxString("STATIC"), InputLabel.c_str(), WS_CHILD | WS_VISIBLE, LabelX, LabelY, LabelWidth, LabelHeight, DialogHandle, 0, GetModuleHandle(0), 0);
int TBoxX = 5, TBoxY = 29;
int TBoxWidth = Width - 20, TBoxHeight = 24;
InputHandle = CreateWindowEx(0, InputBoxString("EDIT"), InputText.c_str(), WS_BORDER | WS_CHILD | WS_VISIBLE, TBoxX, TBoxY, TBoxWidth, TBoxHeight, DialogHandle, (HMENU)1001, GetModuleHandle(0), 0);
int OkBtnX = (Width / 2) - 75, OkBtnY = Height - 60;
int OkBtnWidth = 75, OkBtnHeight = 24;
OkButtonHandle = CreateWindowEx(0, InputBoxString("BUTTON"), InputBoxString("Ok"), WS_CHILD | WS_VISIBLE, OkBtnX, OkBtnY, OkBtnWidth, OkBtnHeight, DialogHandle, (HMENU)1002, GetModuleHandle(0), 0);
int CancelBtnX = (Width / 2) + 25, CancelBtnY = Height - 60;
int CancelBtnWidth = 75, CancelBtnHeight = 24;
CancelButtonHandle = CreateWindowEx(0, InputBoxString("BUTTON"), InputBoxString("Cancel"), WS_CHILD | WS_VISIBLE, CancelBtnX, CancelBtnY, CancelBtnWidth, CancelBtnHeight, DialogHandle, (HMENU)1003, GetModuleHandle(0), 0);
MSG Message;
ZeroMemory(&Message, sizeof(MSG));
while(Message.message != WM_QUIT){
if(PeekMessage(&Message, 0, 0, 0, PM_REMOVE)){
TranslateMessage(&Message);
DispatchMessage(&Message);}}
return Result;
}
#undef InputBoxString
int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int){
InputBoxStringType Result = ShowInputBox(0, L"Please enter your name:", L"Unknown", L"Name Entry");
MessageBox(0, Result.c_str(), L"Your name is:", MB_OK);
return 0;
}

453:デフォルトの名無しさん
09/03/14 10:33:42
>>446
さすがにないかー

>>449
ありがとう。これぐらいのコードでいけるんですね。
C++じゃないけど、参考にさせていただきます

454:デフォルトの名無しさん
09/03/14 12:03:04
こんな糞コード見たのは久しぶりだ

455:デフォルトの名無しさん
09/03/14 12:11:04
つーか、スレに長いコード載せるな

456:デフォルトの名無しさん
09/03/14 12:12:55
#ifdef UNICODE
で分岐さすんなら、
最初っからTCHAR使えばいいんじゃね?w

457:デフォルトの名無しさん
09/03/14 12:15:00
猫わかレベルを超えてるなw

458:デフォルトの名無しさん
09/03/14 12:26:05
目が痛い

459:デフォルトの名無しさん
09/03/14 12:29:45
>>454-458
文句言うならお前が書けよ

460:デフォルトの名無しさん
09/03/14 12:36:09
> Note, I am not the best Win32 programmer, so there may be a better way to handle this. It does work though.

と本人自ら言ってるコードを貼るな馬鹿>>449

461:デフォルトの名無しさん
09/03/14 14:50:17
画面のプロパティのデザインで指定したフォントを取得する API ってありますか?

462:デフォルトの名無しさん
09/03/14 16:16:49
>>459
作ってみたよ
URLリンク(kansai2channeler.hp.infoseek.co.jp)
URLリンク(kansai2channeler.hp.infoseek.co.jp)

463:446
09/03/14 16:33:58
盛り上がっているところなんなのですが、
WSHでInputBoxという関数があり、これを使うと一発でよべました。

Win32APIで、と書いたのですが、Ruby だったのでwshでもよかったので・・・
前提条件書き忘れてスマソ

お騒がせいたしました・・・。

464:デフォルトの名無しさん
09/03/14 16:35:33
>>460
わろす
>I am not the best Win32 programmer
なんて言ってるけど
ただのプログラマとしても相当アレだw

465:デフォルトの名無しさん
09/03/14 16:40:26
よし。ちょっとそこに正座をだな(ry
まあいいけどねw

466:デフォルトの名無しさん
09/03/14 16:49:31
>>463
>WSHでInputBoxという関数があり、これを使うと一発でよべました。
がAPIだとあいやーーー><の世界へGoになるんだって実感したんじゃね

467:デフォルトの名無しさん
09/03/14 16:59:29
>>462
無駄に長すぎ。
昔InputBox互換関数を作った事あるがA/W両対応して (ダイアログプロシージャ内で切り替える) 50行程度で出来たが。

とりあえず、DialogBoxIndirectParamを使ってるのにわざわざCreateWindowExしまくるなら
予めリソースエディタで作っておいたダイアログリソースのバイナリを埋め込んで使えばいいかと。
フォントはMS Shell Dlgを設定しておけばいいし。

static const BYTE templ[] = { ... };
DialogBoxIndirectParam(hinst, (LPCDLGTEMPLATE)templ, ...);

468:デフォルトの名無しさん
09/03/14 17:04:22
つーか実質WM_COMMANDのIDOKでGetDlgItemTextするだけだろ
今時APIオンリーでプログラム作ってる人ならこの程度は直ぐに作れるよ
作ってみたとかいちいち自慢しなくておk


469:デフォルトの名無しさん
09/03/14 17:11:57
リソースなしで作ってるから長いだけであって。
コントロールサイズの調整が必要だからそれだけで終わりじゃないさ。

470:デフォルトの名無しさん
09/03/14 17:14:40
作れ→作った→作ってみたとかいちいち自慢しなくておk

おまえどんな鬼畜だよ

471:デフォルトの名無しさん
09/03/14 17:15:13
だからリソースバイナリを使えって話なんだろ

472:デフォルトの名無しさん
09/03/14 17:16:01
お前はもうちょっと可読性を考えたほうがいい

473:デフォルトの名無しさん
09/03/14 17:16:04
たしかになw 鬼畜すぐるw

474:デフォルトの名無しさん
09/03/14 17:17:50
MS UI Gothic決め打ちしてる糞コードで可読性とかw

475:デフォルトの名無しさん
09/03/14 17:19:19
ダイアログボックス用のフォントってどうやって取得するの?

476:デフォルトの名無しさん
09/03/14 17:19:36
98とかの環境だと、
"MS ゴシック"てしないとダメだよねw

477:デフォルトの名無しさん
09/03/14 17:19:53
違った。メッセージボックス用のフォントだ。

478:デフォルトの名無しさん
09/03/14 17:21:29
無いフォント指定しても勝手に別のフォントが使われるだけだから問題はないだろ・・・

479:デフォルトの名無しさん
09/03/14 17:21:32
>>470
だってさー、5分とかからないレベルのプログラムなのに4時間でコレだぜ?

480:デフォルトの名無しさん
09/03/14 17:22:07
>>479
じゃあお前作れよ

481:デフォルトの名無しさん
09/03/14 17:22:26
>>468
今時APIオンリーでプログラム作ってる人
ってよ趣味グラマじゃないのか?プログラマにそんなのいるのか?

482:デフォルトの名無しさん
09/03/14 17:22:32
>>479
じゃあお前が五分で作って見せろよ

483:デフォルトの名無しさん
09/03/14 17:23:03
今からカウントダウン

484:デフォルトの名無しさん
09/03/14 17:24:31
キタ━━(゚∀゚)━━!!

wktk

485:デフォルトの名無しさん
09/03/14 17:25:40
否定されて悔しかった>>462が「お前が作れ」と言い出したようですね

486:デフォルトの名無しさん
09/03/14 17:26:03
>>485
逃げたーーーーーー!!!!!!!!!!!wwwwwwwwwwwwww

487:デフォルトの名無しさん
09/03/14 17:26:57
>>484
>>486
失せろゴミ


488:デフォルトの名無しさん
09/03/14 17:26:57
作れないのなら最初から私には無理ですと言えよ

489:デフォルトの名無しさん
09/03/14 17:27:21
  ∧_∧
 ( ・∀・)ワクワク
 ( ∪ ∪
 と__)__)

490:デフォルトの名無しさん
09/03/14 17:27:30
そろそろ5分だ

491:デフォルトの名無しさん
09/03/14 17:29:40
作ってみた。

BOOL InputBox(HWND hwnd,INPUTBOXPARAMS* param)
{
 return(DialogBoxParam(hwnd,MAKEINTRESOURCE(IDD_INPUT),hwnd,InputBoxProc,(LPARAM)param)==IDOK);
}

492:デフォルトの名無しさん
09/03/14 17:32:11
もうだめだこのスレ

493:デフォルトの名無しさん
09/03/14 17:32:16
ポカーン

494:デフォルトの名無しさん
09/03/14 17:32:20
>>462
やっぱgoto使った方がすっきりかけるよな

なんで洗脳されてgoto嫌う奴いるんだろうな
場合によってはネスト深くなるだけなのに

495:デフォルトの名無しさん
09/03/14 17:34:07
>>491
出し惜しみしないで、全部さらせ

496:デフォルトの名無しさん
09/03/14 17:34:46
俺も作ってみた(VB用)

Public Function MyInputBox(prompt, title, default)
  MyInputBox = InputBox(prompt, title, default)
End Function

'テスト
Debug.Print MyInputBox("input?","test","default")

497:デフォルトの名無しさん
09/03/14 17:36:34
>>496
作るなよ・・・

498:デフォルトの名無しさん
09/03/14 17:37:52
My(笑)

499:デフォルトの名無しさん
09/03/14 17:40:50
>>496
目覚ましいたのか

500:デフォルトの名無しさん
09/03/14 17:40:51
所詮は作れといわれてすぐに作り始めたと思い込むだけの馬鹿だったか・・・

501:デフォルトの名無しさん
09/03/14 17:41:17
ほれ。

BOOL InputBox(LPTSTR buf, int siz)
{
 FILE*fp;
 AllocConsole();
 fp = fopen("CONIN$", "r");
 if(fp){_fgetts(buf, siz, fp);fclose(fp);}
 FreeConsole();
 return!!fp;
}

502:デフォルトの名無しさん
09/03/14 17:59:03
で、汚いソースコード晒した>>462はどこ行った?

503:デフォルトの名無しさん
09/03/14 18:00:04
>>477
SystemParametersInfoでSPI_GETNONCLIENTMETRICS
一緒に渡すNONCLIENTMETRICSの中のlfMessageFont

504:デフォルトの名無しさん
09/03/14 18:03:32
>>503
ふむふむ。なるほど。㌧

505:デフォルトの名無しさん
09/03/14 18:04:04
>>502
お前がコードを晒さないから呆れてどっか行ったんだろう

506:デフォルトの名無しさん
09/03/14 18:06:00
>>505=>>462
なんだいるじゃんwww

507:デフォルトの名無しさん
09/03/14 18:08:53
www

508:デフォルトの名無しさん
09/03/14 18:10:20
>>502
お前がコードを晒すのを楽しみにして待ってるよ

509:デフォルトの名無しさん
09/03/14 18:12:46
>>508
URLリンク(kansai2channeler.hp.infoseek.co.jp)
URLリンク(kansai2channeler.hp.infoseek.co.jp)

510:デフォルトの名無しさん
09/03/14 18:14:06
>>509
死ねば

511:デフォルトの名無しさん
09/03/14 18:14:48
>>509
これ以上のコードは書けないという意思表示と解釈した

512:デフォルトの名無しさん
09/03/14 18:19:08
何故こんなに>>462がたたかれてるのかwwwwwww
お前ら愛しすぎだ

513:デフォルトの名無しさん
09/03/14 18:21:47
>>511
他人にコード晒せと指図するならまずは自分の書いたコードをまともな物にしてから言えという事だ

514:デフォルトの名無しさん
09/03/14 18:22:55
>>513
他人のコードを叩くならまずは自分の書いたコードを晒すべきだろw
馬鹿かお前は

515:デフォルトの名無しさん
09/03/14 18:23:28
自分で書けないから他人に書かせようとしてんのかwwwwwww

516:デフォルトの名無しさん
09/03/14 18:24:46
暇だなあおまいら

517:デフォルトの名無しさん
09/03/14 18:25:58
別に作らなくてもいいのにわざわざ作る
    ↓
コードが糞で荒れる
    ↓
お前も作れと逆ギレ
    ↓
俺以上のコード書ける奴はいないと自己陶酔  ←今ここ

518:デフォルトの名無しさん
09/03/14 18:26:09
飴と鞭は大事だ

519:デフォルトの名無しさん
09/03/14 18:29:01
>>517
>>470

1時間前のことくらい覚えとけよ

520:デフォルトの名無しさん
09/03/14 18:29:21
                          ┗0=============0┛
               \===========[_|_|_|_|_|_|_|_|_|_|_|_|_|_]===========/
            /三三三三三三三三三三三三三三三三三三三三\
                  0 │ |∞∞∞ |::|∞∞田田∞∞|::|∞∞∞ | ::|  0
            [二] | ::|       |::|┏━━┓|::|       | ::l [二]
◎○@※◎○@※. |□|.│ |┌┬┐ |::|┃ Vista   ┃|::| ┌┬┐| ::|. |□| ◎○@※◎○@※
ii|iiii|iiii|iiii|iiii|iiii|iiii|iiii| `)三(´| ::|├┼┤ |::|┃ ∧_∧ ┃|::| ├┼┤| ::|`)三(´il|iiii|iiii|iiii|iiii|iiii|iiii|iiii|
@※◎○@※◎○ | ::| | ::|└┴┘ |::|┃(´Д` ) ┃|::| └┴┘| ::| | ::|  @※◎○@※◎○
ii|iiii|iiii|iiii|iiii|iiii|iiii|iiii|li┏━━━┓|::|┃(.    つ┃|::|┏━━━┓ li|iiii|iiii|iiii|iiii|iiii|iiii|iiii|l
◎○@iiii※◎○@ ┣┳┳┳┳┳┫|::|┗━━┛|::|┣┳┳┳┳┳┫ ◎○@iiii※◎○@
ii|iiii|iiii|iiii|iiii|iiii|iiii|iiii|l ○    ●        ∫∬∫∬        ●    ○ ii|iiii|iiii|iiii|iiii|iiii|iiii|iiii|li
               ○○  ●●      iiiii iii ii iiii       ●●  ○○
           [ ̄ ̄] [ ̄ ̄]   ( ̄ ̄ ̄ ̄ ̄)    [ ̄ ̄] [ ̄ ̄]
                |_○_|  .|_○_|     |_____|     |_○_|  .|_○_|
    ∧_∧ ∧_∧ ∧_∧ ∧_∧ ∧_∧ ∧_∧ ∧_∧ ∧_∧ ∧_∧
    (NT3.1)(NT3.5)(NT3.51)(,,XP )  (2003)(2008)(Warp4)(,    )(,    ;)

         NTの徒花がめでたく散りますた。 すンげぇメシウマwww


521:デフォルトの名無しさん
09/03/14 18:31:06
自慢気に汚いコード晒せば叩かれるぐらい想像できるだろ

「素晴らしい!とても綺麗なコードですね!有り難く使わせて貰います!!」
なんてレスが付くとでも本気で思ってたのか?

522:デフォルトの名無しさん
09/03/14 19:17:44
そんなことのために上げたわけでもないのに
何を妄想を語ってるんだ?

523:デフォルトの名無しさん
09/03/14 19:20:09
汚いコードしか晒せないから
叩かれるのがいやなので晒しません
という意思表示と見た

524:デフォルトの名無しさん
09/03/14 19:23:31
>>522
API信者は妄想でのみしか語れない、そして、基地外である。覚えておくように
>>520 見事な基地外っプリ

525:デフォルトの名無しさん
09/03/14 19:23:49
きれいなコードというやつを見せて欲しいな

526:デフォルトの名無しさん
09/03/14 19:28:12
お前の入っているコタツから延びてるだろ



527:デフォルトの名無しさん
09/03/14 19:31:38
>>525
ここのスレ住民は妄想でいつも綺麗なAPIのみコードを書いている
それは自分の美学を追及した綺麗なコードだ

528:デフォルトの名無しさん
09/03/14 19:39:57
妄想かいw

529:446
09/03/14 19:41:43
マジごめんなさいヽ(`Д´)ノ ウワァァン!!

530:デフォルトの名無しさん
09/03/14 19:43:53
( ´∀`)σ)`Д´)ノ ウワァァン!!

531:デフォルトの名無しさん
09/03/14 19:44:23
そもそも>>462のコードって別に汚くはないよな?
フォントとボタンのキャプションが決めうちな点で問題はあるが
それは別に汚いと表現することでもないし

532:デフォルトの名無しさん
09/03/14 19:48:37
汚いというより間違ってる

533:デフォルトの名無しさん
09/03/14 19:52:46
> そもそも>>462のコードって別に汚くはないよな?

自画自賛乙

534:デフォルトの名無しさん
09/03/14 20:03:53
CancelにもBS_DEFPUSHBUTTONしてあるしな

535:デフォルトの名無しさん
09/03/14 20:04:30
>>533
お前のコードが見てみたい

536:デフォルトの名無しさん
09/03/14 20:05:19
>>533
自画自賛で何か問題でも?

537:デフォルトの名無しさん
09/03/14 20:06:25
>>536
自画自賛の開き直り乙

538:デフォルトの名無しさん
09/03/14 20:07:02
>>537
ありがとう

539:デフォルトの名無しさん
09/03/14 20:09:19
>>462
なんかスキル浅い人が色々やってみましたって感じ
てかフォントやコントロールのサイズ決め打ちするぐらいなら>>467の方法でいいと思うが

540:デフォルトの名無しさん
09/03/14 20:09:48
もう駄目かもしれんね

541:デフォルトの名無しさん
09/03/14 20:12:28
メッセージとエディットボックスのサイズは決めうちしてないけど

542:デフォルトの名無しさん
09/03/14 20:14:25
とりあえずみんなコードで語れ

543:デフォルトの名無しさん
09/03/14 20:15:43
つーか横幅は固定でいいだろ。しかも字幅の計算がなんかアレだし。

544:デフォルトの名無しさん
09/03/14 20:16:00
固定はまずいだろ・・・

545:デフォルトの名無しさん
09/03/14 20:16:58
GetTextExtentPoint以外に何かいい方法あるのん?

546:デフォルトの名無しさん
09/03/14 20:17:33
>>544
WSHやVBのInputBox使ったこと無いのか?

547:デフォルトの名無しさん
09/03/14 20:22:05
MessageBoxが伸びるからInputBoxも伸ばしただけだが

548:デフォルトの名無しさん
09/03/14 20:23:26
>>546
なんとも不便なんだな

549:デフォルトの名無しさん
09/03/14 20:27:34
ダイアログなのにGWLP_USERDATAとか使っちゃってるし
しかもLONG_PTRじゃなくてLONGにキャストしちゃってるし
SM_C?SCREENで画面サイズ計算しちゃってるし

猫プログラミングぐらいのレベルだな

550:デフォルトの名無しさん
09/03/14 20:32:35
画面サイズはメジャーを使ってモニターに押し当てないと測れないな。

551:デフォルトの名無しさん
09/03/14 20:37:45
MAX_WIDTHっておい、どう見てもMIN_WIDTHの間違いだろw

で、MessageBoxと違ってmaxは考慮しないのな
WUXGAとかで開発してるとnetbookで使った時えらい事になりそうだw

552:デフォルトの名無しさん
09/03/14 20:39:42
ダイアログは別のやつ使うんだった気がしてたけど調べるの忘れてたわ。 >GWLP_USERDATA
LONGになってんのは単純なミス。
画面サイズは何を使えば満足? マルチディスプレイはよく分からん。
どう見てもMIN_WIDTHの間違い。 >MAX_WIDTH
MessageBoxってmax考慮してたっけ? 画面外にまで突き抜けてた気がするけど。

553:デフォルトの名無しさん
09/03/14 20:41:20
WM_SETFONTした後のGetDCでフォントが選択されてる保証ってあるの?

554:デフォルトの名無しさん
09/03/14 20:45:22
何ていうか、見た人のスキルで評価の分かれるコードだw
「どこがダメなんだ?」と思った人は猫わかレベルの人だろう

555:デフォルトの名無しさん
09/03/14 20:46:52
勉強になるなあ

556:デフォルトの名無しさん
09/03/14 20:55:10
もろもろ考慮しても>>467は50行で作れるし
>>479は5分で作れるのか
すげぇな

557:デフォルトの名無しさん
09/03/14 20:55:45
ウィンドウの中のある座標に向かってクリックメッセージを送るAPIってありますか?
ボタン風に書いてあるメニューボタンがあるんですが、実際は絵なので
ハンドルが取れないのです。


558:デフォルトの名無しさん
09/03/14 20:58:51
クリックした際の処理を自分で走らせれば?

559:デフォルトの名無しさん
09/03/14 21:06:56
>>556
だってさ、最小コードはこれだろ?50行なんて余裕でしょ

INT_PTR CALLBACK InputBoxProc(HWND hDlg,UINT Msg,WPARAM wParam,LPARAM lParam)
{
 switch(Msg){
 case WM_INITDIALOG:
  return SetWindowLongPtr(hDlg,DWLP_USER,lParam),TRUE;
 case WM_COMMAND:
  switch(GET_WM_COMMAND_ID(wParam,lParam)){
  case IDOK:
  {
   LPTSTR p = (LPTSTR)GetWindowLongPtr(hDlg,DWLP_USER);
   GetDlgItemText(hDlg,IDC_TEXT,p,*(int*)p);
  }
  case IDCANCEL:
   EndDialog(hDlg,GET_WM_COMMAND_ID(wParam,lParam));
  }
 }
 return FALSE;
}

560:デフォルトの名無しさん
09/03/14 21:11:01
すみません、説明不足でした。
外部アプリのメニューを操作したいのですが、そのメニューボタンが
すべて絵なんです。

561:デフォルトの名無しさん
09/03/14 21:17:30
>>559
リソース使ってる点は無視するにしても
メッセージの長さにウィンドウを合わせる処理がないのでは・・・

562:デフォルトの名無しさん
09/03/14 21:19:03
>>560
何か怪しいことに使おうとしてるんじゃないのかね

563:デフォルトの名無しさん
09/03/14 21:19:06
>>560
WM_LBUTTONDOWN じゃだめなの?

564:デフォルトの名無しさん
09/03/14 21:20:57
>>559
自信満々に出してきたコードがこれでは…

565:デフォルトの名無しさん
09/03/14 21:22:11
>>561
別にメッセージの長さに合わせる必要性が無いし、
リソース使ってるのに問題でもあるのか?
フォント決め打ちよりはマシだろ

566:デフォルトの名無しさん
09/03/14 21:24:12
てか、メッセージを設定する部分はどこ行った

567:デフォルトの名無しさん
09/03/14 21:24:22
>>561
メッセージを表示するコードがないんだから、長さを合わせる以前の問題だろうw

568:デフォルトの名無しさん
09/03/14 21:26:06
だから>>559は最小コードだって
これに肉付けしていっても50行ぐらいで十分収まるだろってこと

569:デフォルトの名無しさん
09/03/14 21:27:22
リソース使えばそりゃ>>462だって短くなるし
ちゃんとした比較にならないのでは

570:デフォルトの名無しさん
09/03/14 21:30:13
リソースもフォント決め打ちじゃないの?

571:デフォルトの名無しさん
09/03/14 21:30:18
いや、>>556の「50行・5分で作れるのすげぇ」レスを受けて5分で書いてみただけだし

572:デフォルトの名無しさん
09/03/14 21:32:02
もろもろ考慮されてるか?

573:デフォルトの名無しさん
09/03/14 21:34:00
API使いならリソースなんて使わないんじゃないか

574:デフォルトの名無しさん
09/03/14 21:35:14
リソースはソース配るのが面倒だな

575:デフォルトの名無しさん
09/03/14 21:35:58
>>573
お前アホだろw

576:デフォルトの名無しさん
09/03/14 21:36:03
>>573
リソースを使うAPIを使いたいだろw

577:560
09/03/14 21:41:02
>>562
そ、そんなんじゃないです。
>>563
カーソルを移動させてってことですか?

他のソフトで目的の外部アプリを操ってるのがあって
どうやってるのかなってのと、自分もそういうのを作る
必要があったので。

578:デフォルトの名無しさん
09/03/14 21:41:41
mouse_event, SendInput

579:デフォルトの名無しさん
09/03/14 21:46:30
> メニューボタンがすべて絵
最近こういうのホント多いよなぁ。動画編集ソフトとか特に。
使い勝手が良ければまだしも、キーボード操作を全く受け付けなかったりとか。

もう素直に標準のコントロール使ってくれよ・・・。

580:デフォルトの名無しさん
09/03/14 21:49:31
もはやあらゆるものをDirect3Dで描画する時代に入ったんだよ

581:デフォルトの名無しさん
09/03/14 22:05:54
2D(GDI)のハードウェアアクセラレーションはRADEONもGeForceも既に搭載しとらんだろ
XPはもうロートルなんだから7600GSやX1650でも積んでればいいんだ


582:デフォルトの名無しさん
09/03/14 22:12:44
>>580-581
誤爆?

583:デフォルトの名無しさん
09/03/14 22:30:59
moudamedakonosure

584:デフォルトの名無しさん
09/03/15 00:00:19
>>579-581
そこで、ActiveAccessibilityの幻想ですよ。

585:デフォルトの名無しさん
09/03/15 00:22:30
自プロセス内の全スレッドのレジスタの値を取得するAPIは無い?

586:デフォルトの名無しさん
09/03/15 00:26:33
インラインアセンブラで取ってろ

587:560
09/03/15 07:23:43
>>578
ありがとうございます。
ググってみたら出来そうな気がします。

588:デフォルトの名無しさん
09/03/15 07:40:34
レジストリエディタでキーを作成すると、日本語Windowsだと(標準)という名前でエントリが1つ
常に存在してるようなのですが、このエントリを読み書きするにはどうすれば
いいのでしょうか?よろしくお願いします。

589:デフォルトの名無しさん
09/03/15 08:02:48
588です。解決しました。MSDNに書いてありましたね。すみません。
名前にNULLまたは空文字列を設定するんですね。

590:デフォルトの名無しさん
09/03/15 11:40:33
URLリンク(www.fnn-news.com)

591:デフォルトの名無しさん
09/03/15 11:58:57
>>585
関数呼び出し自体がレジスタを変えるというのに
どうやってそんな API を作ればいいんだよ

592:デフォルトの名無しさん
09/03/15 12:12:58
CONTEXT 構造体にアクセスしたいんじゃね?

593:デフォルトの名無しさん
09/03/15 12:16:30
GetThreadContextじゃねーの?

594:デフォルトの名無しさん
09/03/15 14:36:03
espやeipの値が変わる分は補正すればいいということか

595:デフォルトの名無しさん
09/03/15 14:49:11
GetThreadContextを呼んだ時点でeaxやedxは確実に変わってるだろが

596:デフォルトの名無しさん
09/03/15 14:51:40
だから補正しろつってるだろ。

597:デフォルトの名無しさん
09/03/15 14:51:52
CONTEXT構造体がローカル変数なら
特に何ともないと思うけど・・・

598:デフォルトの名無しさん
09/03/15 14:56:38
頭悪いのが数名混じってるねぇ
GetThreadContextの実体が呼ばれるまでにAPIがレジスタを書き換えてしまってるでしょうに

GetThreadContext:
push ebp
mov ebp, esp
push dword ptr [ebp+0C]
push dword ptr [ebp+08]
call dword ptr [NtGetContextThread]
...

NtGetContextThread:
mov eax, 00000055h
mov edx, 7FFE0300h
call dword ptr [edx]
...

599:デフォルトの名無しさん
09/03/15 15:01:18
不確定性原理の話じゃないのかw

600:デフォルトの名無しさん
09/03/15 15:04:31
そんな糞実装になってんのか?

601:デフォルトの名無しさん
09/03/15 15:05:35
つーかインラインアセンブラ使えばいいのにAPIてw

あ、VBプログラマーの方でしたかサーセンwww

602:デフォルトの名無しさん
09/03/15 15:09:53
>>600
糞なのはお前だ

少なくともeax,ecx,edxは「関数側で自由に書き換えていいレジスタ」だ
そんな事も知らんのか

603:デフォルトの名無しさん
09/03/15 15:29:37
気にするな。
そもそも、MSDNライブラリには、SuspendThreadで止めてからやれって書いてあるんだ。
(経験上、動いているスレッドを指定してもエラーになることはないけど)
URLリンク(msdn.microsoft.com)

604:デフォルトの名無しさん
09/03/15 15:59:37
動いてる他スレッドなんか無意味だろ
API呼出から戻ってくる間にもスレッドが動きつづけていてレジスタの値が刻一刻と変わる

605:デフォルトの名無しさん
09/03/15 16:01:05
>>602
それが何か関係あるか?
レジスタのスナップショットを取りたいという目的を達成できてないじゃないのよ

606:デフォルトの名無しさん
09/03/15 16:04:32
>>605
お前がアホなのはよくわかった

607:デフォルトの名無しさん
09/03/15 16:05:27
お前がアホなのもよくわかった

608:デフォルトの名無しさん
09/03/15 16:07:10
つーかGetThreadContextはコンテキストスイッチが発生して退避した時の状態を返してるだけだろ。
レジスタを取得するAPIとか、頭悪すぎ。

609:デフォルトの名無しさん
09/03/15 16:10:54
なんだ、目的すら違うのか

610:デフォルトの名無しさん
09/03/15 16:12:04
レジスタのスナップショット(笑)


エミュレータでも作ってろ馬鹿

611:デフォルトの名無しさん
09/03/15 16:15:38
基本情報技術者レベルの知識すら無い人がなんでこのスレにいるのかねぇ・・・

612:デフォルトの名無しさん
09/03/15 16:32:31
システムコールも良く分かってないくせに糞実装とか

思わず微笑んじゃう

613:デフォルトの名無しさん
09/03/15 17:20:22
たとえば、
CのライブラリとWin32のAPIで同じ機能の関数があった場合
システムまで問い合わせる分APIのほうが遅くなるの?

614:デフォルトの名無しさん
09/03/15 17:44:59
うん

615:デフォルトの名無しさん
09/03/15 17:53:20
>>613
うわー頭悪そうな質問

616:デフォルトの名無しさん
09/03/15 18:03:21
同じ機能だと、Cのライブラリ関数も中でWin32のAPIを呼んでいたり
するんだよね

617:デフォルトの名無しさん
09/03/15 18:09:11
>>615
うわーーーーっ、超頭悪そう、嫌だ嫌だ

618:デフォルトの名無しさん
09/03/15 18:14:10
オウム返ししか出来ないアホは黙っててね

619:デフォルトの名無しさん
09/03/15 18:17:05
IPCの分遅くなるだろな

620:デフォルトの名無しさん
09/03/15 18:17:36
数日前から変なのが一匹住み着いてるな
たぶん目覚まし君が帰ってきたのだろう

621:デフォルトの名無しさん
09/03/15 18:18:48
>>615
は超楽しそうな奴と思うんだが、なっ、だろ

622:デフォルトの名無しさん
09/03/15 18:20:00
馬鹿はレスしなくていいよ

623:デフォルトの名無しさん
09/03/15 18:20:15
例えば、strcpyとlstrcpyAなら、
前者のほうがコンパイラの裁量でインライン展開される可能性がある。

そうでなくとも、strcpyのほうが速かった気がするが、
最近計ったわけではないからよく覚えていない。

あと、この2つはNULL渡したときの挙動が異なった気がする。

いい加減なことばかりですまん。

624:デフォルトの名無しさん
09/03/15 18:20:40
最終的にシステムコールになるけど、それがWinの場合APIだから
最終的にはAPIが呼ばれるだろう。

625:デフォルトの名無しさん
09/03/15 18:21:39
>>620は目覚まし?

626:デフォルトの名無しさん
09/03/15 18:24:19
>>625が目覚ましでした

627:デフォルトの名無しさん
09/03/15 18:26:26
>>623
同じようにlstrcpyAもインライン展開の可能性ないのか

628:デフォルトの名無しさん
09/03/15 18:27:41
>>627
APIをインライン展開て

馬鹿丸出し

629:デフォルトの名無しさん
09/03/15 18:29:12
>>623
インライン展開じゃなくてCompiler Intrinsicだろ。

630:デフォルトの名無しさん
09/03/15 18:35:46
strcpyくらいアセンブラで書けよ

631:デフォルトの名無しさん
09/03/15 18:40:11
コンパイラは境界や長さによって生成する機械命令を変えたりして
性能の最適化を図るんだけど

632:デフォルトの名無しさん
09/03/15 18:42:49
>>630 書いてくれ

633:デフォルトの名無しさん
09/03/15 18:44:50
今時strcpyなんて使わねーよ

634:デフォルトの名無しさん
09/03/15 18:49:46
目覚まし君の人気に嫉妬
誰か俺にもわかるように経緯教えてくれ

635:デフォルトの名無しさん
09/03/15 18:50:32
■ おすすめ2ちゃんねる 開発中。。。 by FOX ★
このスレを見ている人はこんなスレも見ています。(ver 0.20)
気軽に「こんなソフトありませんか?」 Part.104 [ソフトウェア]
【名無し限定】暇なので話しませんか?3925 [メンヘルサロン] <====

メンヘルに気合を入れて出入りしているのが、>>620の言う変なのか

636:デフォルトの名無しさん
09/03/15 18:57:19
>>633
strcpy使わないなら何使ってんだよ

637:デフォルトの名無しさん
09/03/15 18:59:05
_tcscpy

638:デフォルトの名無しさん
09/03/15 18:59:17
strcpy_s若しくはStringCchCopyにきまってるだろ
今時無条件にstrcpy使っちゃう人はJavaや.NETにした方がいいよ

639:デフォルトの名無しさん
09/03/15 19:18:57
>>636
windowsならStrsafe.hインクルードだろうが
ただ、俺はwin専業じゃないからstrcpyもよく使っている

640:デフォルトの名無しさん
09/03/15 19:22:38
ん? std::string 使うって話じゃなかったのか?

641:デフォルトの名無しさん
09/03/15 19:22:45
クロス環境だとstrcpyは現役だなぁ
それと、_s系って結局ラッパじゃねーの?

642:デフォルトの名無しさん
09/03/15 19:24:25
フツーに_tcscpy_sだと思うけど。

643:デフォルトの名無しさん
09/03/15 19:57:12
VS2005以降じゃねーかw

644:デフォルトの名無しさん
09/03/15 19:58:46
std::stringってなんでc_str()をthrow()にしなかったんだろ
おかげで肝心な所で微妙に使い難い

645:デフォルトの名無しさん
09/03/15 20:27:34
>>644
c_strが呼ばれた瞬間に'\0'を付加する実装も可能にするためだと思う。


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch