所有由霜月发布的文章

bat生成exe

;@echo off
;Title Converting batch scripts to file.exe with iexpress
;Mode 75,3 & color 0A
;Rem Original Script https://github.com/npocmaka/batch.scripts/edit/master/hybrids/iexpress/bat2exeIEXP.bat
;echo(
;if “%~1” equ “” (
;echo Usage : Drag and Drop your batch file over this script:”%~nx0″
;Timeout /T 5 /nobreak>nul & Exit
😉
;set “target.exe=%__cd__%%~n1.exe”
;set “batch_file=%~f1”
;set “bat_name=%~nx1”
;set “bat_dir=%~dp1”
;Set “sed=%temp%\2exe.sed”
;echo Please wait a while … Creating “%~n1.exe” …
;copy /y “%~f0” “%sed%” >nul
;(
;(echo()
;(echo(AppLaunched=cmd /c “%bat_name%”)
;(echo(TargetName=%target.exe%)
;(echo(FILE0=”%bat_name%”)
;(echo([SourceFiles])
;(echo(SourceFiles0=%bat_dir%)
;(echo([SourceFiles0])
;(echo(%%FILE0%%=)
;)>>”%sed%”

;iexpress /n /q /m %sed%
;del /q /f “%sed%”
;exit /b 0

[Version]
Class=IEXPRESS
SEDVersion=3
[Options]
PackagePurpose=InstallApp
ShowInstallProgramWindow=0
HideExtractAnimation=1
UseLongFileName=1
InsideCompressed=0
CAB_FixedSize=0
CAB_ResvCodeSigning=0
RebootMode=N
InstallPrompt=%InstallPrompt%
DisplayLicense=%DisplayLicense%
FinishMessage=%FinishMessage%
TargetName=%TargetName%
FriendlyName=%FriendlyName%
AppLaunched=%AppLaunched%
PostInstallCmd=%PostInstallCmd%
AdminQuietInstCmd=%AdminQuietInstCmd%
UserQuietInstCmd=%UserQuietInstCmd%
SourceFiles=SourceFiles

[Strings]
InstallPrompt=
DisplayLicense=
FinishMessage=
FriendlyName=-
PostInstallCmd=<None>
AdminQuietInstCmd=

 

 

/tools/bat2exe.bat

java 字符串比较equals总是返回false

1.去格式

public static String deleteUTF8Bom(String fileStr) {
byte[] UTF8_BOM_BYTES = new byte[]{(byte) 0xEF, (byte) 0xBB, (byte) 0xBF};
byte[] bytes = fileStr.getBytes();
if (bytes[0] == UTF8_BOM_BYTES[0]
&& bytes[1] == UTF8_BOM_BYTES[1]
&& bytes[2] == UTF8_BOM_BYTES[2]) {
return new String(bytes, 3, bytes.length – 3);
}
return fileStr;
}

 

 

 

2.统一编码

String v1 = “1-2”;
String v2 = “1-2”;
v1 = new String(v1.getBytes(“ISO-8859-1″),”UTF-8”);
v2 = new String(v2.getBytes(“ISO-8859-1″),”UTF-8”);
if(v1.equals(v2)){
System.out.println(“该两个字符相等”);
}

 

3.去空格

c# 通过npoi操作excel汇总

1:新建工程,使用nuget添加引用

2:读取文件时,需要判断后缀

static DataTable ReadExcel(string filename)
{
DataTable dtTable = new DataTable();
List<string> rowList = new List<string>();
ISheet sheet;
string fileExt = Path.GetExtension(filename).ToLower();
IWorkbook workbook;

using (var fs = new FileStream(filename, FileMode.Open))
{
if (fileExt == “.xlsx”) { workbook = new XSSFWorkbook(fs); } else if (fileExt == “.xls”) { workbook = new HSSFWorkbook(fs); } else { workbook = null; }
if (workbook == null) { return null; }

sheet = workbook.GetSheetAt(0);
IRow headerRow = sheet.GetRow(0);
int cellCount = headerRow.LastCellNum;
for (int j = 0; j < cellCount; j++)
{
ICell cell = headerRow.GetCell(j);
if (cell == null || string.IsNullOrWhiteSpace(cell.ToString())) continue;
{
dtTable.Columns.Add(cell.ToString());
}
}
for (int i = (sheet.FirstRowNum + 1); i <= sheet.LastRowNum; i++)
{
IRow row = sheet.GetRow(i);
if (row == null) continue;
if (row.Cells.All(d => d.CellType == CellType.Blank)) continue;
for (int j = row.FirstCellNum; j < cellCount; j++)
{
if (row.GetCell(j) != null)
{
if (!string.IsNullOrEmpty(row.GetCell(j).ToString()) && !string.IsNullOrWhiteSpace(row.GetCell(j).ToString()))
{
rowList.Add(row.GetCell(j).ToString());
}
}
}
if (rowList.Count > 0)
dtTable.Rows.Add(rowList.ToArray());
rowList.Clear();
}
}
// return JsonConvert.SerializeObject(dtTable);
return dtTable;
}

 

sql server 慢查询 的sql 语句内容查询

SELECT TOP 20 TEXT AS ‘SQL Statement’,last_execution_time AS ‘Last Execution Time’
,(total_logical_reads + total_physical_reads + total_logical_writes) / execution_count AS [Average IO]
,(total_worker_time / execution_count) / 1000000.0 AS [Average CPU Time (sec)]
,(total_elapsed_time / execution_count) / 1000000.0 AS [Average Elapsed Time (sec)]
,execution_count AS “Execution Count”
,qp.query_plan AS “Query Plan”
FROM sys.dm_exec_query_stats qs
CROSS APPLY sys.dm_exec_sql_text(qs.plan_handle) st
CROSS APPLY sys.dm_exec_query_plan(qs.plan_handle) qp –加上这个,执行时间有点长。
ORDER BY total_elapsed_time / execution_count DESC

SELECT TOP 20
total_worker_time/1000 AS [总消耗CPU 时间(ms)],
execution_count [运行次数],
qs.total_worker_time/qs.execution_count/1000 AS [平均消耗CPU 时间(ms)],
last_execution_time AS [最后一次执行时间],
max_worker_time /1000 AS [最大执行时间(ms)],
SUBSTRING(qt.text,qs.statement_start_offset/2+1,(CASE WHEN qs.statement_end_offset = -1 THEN DATALENGTH(qt.text) ELSE qs.statement_end_offset END -qs.statement_start_offset)/2 + 1) AS [使用CPU的语法],
qt.text [完整语法],
dbname=db_name(qt.dbid),
object_name(qt.objectid,qt.dbid) ObjectName
FROM sys.dm_exec_query_stats qs WITH(nolock)
CROSS apply sys.dm_exec_sql_text(qs.sql_handle) AS qt
WHERE execution_count>1
ORDER BY total_worker_time DESC

打脸记

折腾几个小时,记录下,

今天例行检查之前做的cefsharp的自动登陆的程序,发现一个网站没有自动登陆,调试发现,网站改版了,

麻烦的是用了之前各种获取控件的方法,因为标签是做了随机数,每次刷新登陆的标签都会改变.

尝试了各种办法不行,本想实在不行就用新的cefsharp的postdata测试.于是随手输入了几个值点了提交

才发现,这么忠厚老实的wika,居然用的是明文传输.直接明文传到登陆的校验接口.

真是神奇的操作,然后用正式的数据测试,直接get到返回的登陆成功的信息

这网站的安全设定也是醉了,相当于买了扇顶级安全的门,钥匙挂在上面…

 

使用JavaScript为react的页面的控件赋值

因为使用cefsharp做的自动登陆程序,涉及到一部分为控件的赋值,最近遇到一个使用react写的页面.没法直接用abc.value=’123’的方式直接赋值,经研究可以使用一下代码

var ev = new Event(‘input’, { bubbles: true});
ev.simulated = 
true;
abc.value = 
‘ 123‘;
abc.dispatchEvent(ev);

 

 

 

 


最新更新, 使用一下代码

https://raw.githubusercontent.com/nullQ/js/main/js_setvalue_input_via_react